Unterschied zwischen dem Array-Typ und dem mit malloc zugewiesenen Array

Heute habe ich einem Freund von mir mit C-Code geholfen und dabei ein merkwürdiges Verhalten festgestellt, das ich ihm nicht erklären konnte, warum es passiert ist. Wir hatten eine TSV-Datei mit einer Liste von ganzen Zahlen, mit einer Ganzzahl in jeder Zeile. Die erste Zeile war die Anzahl der Zeilen in der Liste.

Wir hatten auch eine C-Datei mit einem sehr einfachen "readfile". Die erste Zeile wurde mit n gelesen, die Anzahl der Zeilen, dann gab es eine Initialisierung von:

<code>int list[n]
</code>

und schließlich eine for-Schleife von n mit einem fscanf.

Für kleine n (bis ~ 100.000) war alles in Ordnung. Wir haben jedoch festgestellt, dass ein Segfault auftritt, wenn n groß ist (10 ^ 6).

Schließlich haben wir die Listeninitialisierung auf geändert

<code>int *list = malloc(n*sizeof(int))
</code>

und alles wenn gut, auch mit sehr großen n.

Kann jemand erklären, warum das passiert ist? was hat den segfault mit int list [n] verursacht, der gestoppt wurde, als wir mit list = malloc (n * sizeof (int)) angefangen haben?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage