Naruszenie ochrony pamięci.
Ostatnio zmodyfikowano 2021-05-21 07:28
czq89364 Temat założony przez niniejszego użytkownika |
Naruszenie ochrony pamięci. » 2021-05-20 14:45:42 Mam problem z uruchamianiem kodu na Ubuntu, wyrzuca błąd "Naruszenie ochrony pamięci (zrzut pamięci)". Program działa na Windowsie, ale zależy mi na tym żeby na Ubuntu też się uruchamiał. #include <iostream> #include <fstream> using namespace std;
struct SObiektyw { string rodzaj; float przeslona; float ogniskowa; }; struct SAparat { string nazwa; int ilosc; SObiektyw * obiektyw; };
void wczytaj( SAparat & aparaty ) { ifstream plik; plik.open( "dane.txt" ); plik >> aparaty.nazwa >> aparaty.ilosc; if( aparaty.ilosc > 0 ) { aparaty.obiektyw = new SObiektyw[ aparaty.ilosc ]; } for( int i = 0; i < aparaty.ilosc; ++i ) { plik >> aparaty.obiektyw[ i ].rodzaj >> aparaty.obiektyw[ i ].przeslona >> aparaty.obiektyw[ i ].ogniskowa; } }
void wypisz( SAparat & aparaty ) { ofstream plik2; plik2.open( "dane2.txt" ); plik2 << aparaty.nazwa << aparaty.ilosc; for( int i = 0; i < aparaty.ilosc; ++i ) { plik2 << aparaty.obiektyw[ i ].rodzaj << aparaty.obiektyw[ i ].przeslona << aparaty.obiektyw[ i ].ogniskowa; } }
int zlicz( SAparat & aparaty ) { int licznik = 0; for( int i = 0; i < aparaty.ilosc; ++i ) { if( aparaty.obiektyw[ i ].ogniskowa > 50 ) { licznik++; } } return licznik; }
void usun( SAparat & aparaty ) { delete[ ] aparaty.obiektyw; }
int main() { SAparat aparaty; wczytaj( aparaty ); wypisz( aparaty ); cout << zlicz( aparaty ); usun( aparaty ); return 0; }
Pewnie chodzi o linijkę aparaty.obiektyw = new SObiektyw[ aparaty.ilosc ]; ale nie wiem gdzie leży błąd. |
|
DejaVu |
» 2021-05-20 15:07:30 Skompiluj program w debugu i uruchom go za pomocą gdb - wówczas dowiesz się w którym miejscu jest problem. |
|
czq89364 Temat założony przez niniejszego użytkownika |
» 2021-05-20 15:28:02 struct SObiektyw{ Exception has occurred. Segmentation fault
Jest to możliwe, że mam zbyt mało miejsca na dysku? |
|
DejaVu |
» 2021-05-20 15:29:16 Jeżeli masz co najmniej 10MB wolnego miejsca to raczej nie :) |
|
pekfos |
» 2021-05-20 20:03:01 Pewnie plik wejściowy nie istnieje i program się wywala na niezainicjalizowanych wartościach w strukturze. Wyzeruj na start ilosc i obiektyw. |
|
wojownik266 |
» 2021-05-20 21:05:57 Bez większych ceregieli program skompilowałem i uruchomiłem pod linuxem mint mate. Co się rzuca w oczy po uruchomieniu to rozmiar pliku "dane2.txt" który w chwili gdy go wyłączyłem ręcznie miał rozmiar 9MB i dalej ten rozmiar powiększał. Wyglądało to jak pętla nieskończona... Pomogłem w czymś? |
|
nanoant20 |
» 2021-05-21 07:28:57 wykonaj to co pisze pekfos, to wyelminuje błędy typu "Segmentation fault" int ilosc { 0 }; SObiektyw * obiektyw = { nullptr };
|
|
« 1 » |