Witam.
Aktualnie pisze jeden mały programik na grafach. Niestety mam z nim drobny problem. Gdy wyślę zadanie na serwer wyświetla błąd:
process exited due to signal 6 Przerwane (SIGABRT)
Okazało się że u mnie program się wiesza dla "dużych" rezerwowanych bloków pamięci. Pogrzebałem i napisałem wersje demonstrująca błąd (wystarczy wpisać np 200000):
#include <iostream>
#include <list>
using namespace std;
class miasto
{
public:
list<miasto*> drogi;
bool gildiaIsSet;
bool gildia;
miasto() //int drogiMaxSize
{
gildiaIsSet = false;
}
};
int main()
{
int liczbaMiast;
cin>>liczbaMiast;
miasto miasta[liczbaMiast];
return 0;
}
Pamięciożerny programu
Szukając na google znalazłem informacje że błąd ten może być powodowany brakiem pamięci (inny osobnik twierdził że jej niepoprawnym zwalnianiem) jednak obie te wersje wydają mi się mało prawdopodobne prawdopodobne (zresztą w przykładzie nie ma zwalniania pamięci).
Kod do zdiagnozowania zużycia pamięci:
cout<< sizeof( miasto ) <<endl;
cout<< sizeof( list<miasto*>::iterator ) <<endl;
cout<< sizeof( list<miasto*> ) <<endl;
Na wyjsciu daje
12
8
4
Oznacza to że zużycie pamięci nie jest takie dłużę bo na reserwowaną tablice porzebuje 12*200000 = 2 400 000 = 2.4MB (Cały program zużywał by niecałe 4MB)
Na serwerze na program przeznaczone są 32MB (albo i więcej) a ja w na moim sprzęcie mam mniej więcej od 500MB - 1GB pamięci wolnej.
Konkluzja
Ktoś wie czym jest spowodowany ten błąd i jak napisać to tak żeby się nie sypało??