Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Naruszenie ochrony pamięci.

Ostatnio zmodyfikowano 2021-05-21 07:28
Autor Wiadomość
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ł.


C/C++
#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.
P-178631
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.
P-178632
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?
P-178633
DejaVu
» 2021-05-20 15:29:16
Jeżeli masz co najmniej 10MB wolnego miejsca to raczej nie :)
P-178634
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.
P-178637
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ś?  
P-178639
nanoant20
» 2021-05-21 07:28:57
wykonaj to co pisze pekfos, to wyelminuje błędy typu "Segmentation fault"
C/C++
int ilosc { 0 };
SObiektyw * obiektyw = { nullptr };
P-178644
« 1 »
  Strona 1 z 1