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:))
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) ).