Błąd: process exited due to signal 6 Przerwane (SIGABRT)

0

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??

0

OI :P

0

Nom ;P

Szczerze to rozwiązałem to zadanie zupełnie inną metodą, zresztą nieporównywalnie lepszą od grafów ale nie rozumiem skąd pochodzi ten błąd. Przeto teoretycznie mamy wystarczającą liczbę pamięci?? Jest to aplikacja konsolowa więc może stara ograniczenie 1mB (no w zasadzie kolo 64kB?? A może w pamięci nie ma tak dużego ciągłego obszaru pamięci??

Jest to dla mnie o tyle ważne że będę wiedział jak uniknąć podobnego błędu w przyszłości.

0
ktosi napisał(a)

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??

Sprawdzasz ile zajmuje sam obiekt list<>, a nie to co dynamicznie zaalokowal (size(vector<>) jest zawsze stała i wynosi kilka-kilkanaście bajtów, i nie zależy od tego że dasz 1000000 razy push_back(), który przecież też zużyje pamięć, ale nie w obiekcie vectora<>)

1 użytkowników online, w tym zalogowanych: 0, gości: 1