Frage

Warum ist dieser Code werfen ein SIGSEGV :

int main()
{
    unsigned long toshuffle[9765625];

    unsigned long i;

    for (i=0; i< 1000; i++)
        toshuffle[i]= i;

    return 0;
}

Pointers wird geschätzt. (Kein Wortspiel beabsichtigt:))

War es hilfreich?

Lösung

Verwenden Sie malloc (), um so viel Speicher zu erhalten. Sie sind überfüllt den Stapel.

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

Natürlich, wenn Sie mit ihm fertig sind, werden Sie befreien müssen () es.

Hinweis: In C ++ müssen Sie den Zeiger auf den richtigen Typ werfen

.

Andere Tipps

Wahrscheinlich, weil Sie nicht 9765625 longs auf Stapel zuzuweisen (was diese Seite erneut aufgerufen wird? :)). Verwenden Sie malloc() statt.

Von der manpage

  • RLIMIT_STACK

Die maximale Größe des Prozessstapels in Bytes. Nach Erreichen dieser Grenze wird ein SIGSEGV Signal erzeugt. Um dieses Signal zu verarbeiten, muss ein Prozess verwendet einen alternativen Signalstapel ( sigaltstack (2) ).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top