Unterschied zwischen Array-Typ und Array, die mit malloc zugewiesen wurden

Heute half ich einen Freund von mir mit einigen C-code, und ich habe festgestellt, dass einige seltsame Verhalten, dass ich nicht ihm erklären, warum es passiert war. Wir hatten die TSV-Datei mit einer Liste von Ganzzahlen, die mit einem int-jede Zeile. Die erste Linie wurde die Anzahl der Zeilen der Liste hatte.

Hatten wir auch eine c-Datei mit einem sehr einfachen "readfile". Die erste Zeile war zu Lesen, n die Anzahl der Zeilen, dann gab es ein Initialisierung:

int list[n]

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

Für kleine n (bis ~100.000), war alles in Ordnung. Allerdings haben wir festgestellt, dass, wenn n groß (10^6), ein segfault auftreten würde.

Schließlich wechselten wir die Liste der Initialisierung zu

int *list = malloc(n*sizeof(int))

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

Kann jemand erklären, warum dies geschah? was führte dazu, dass der segfault mit int Liste[n], das war gestoppt, wenn wir mit der Liste = malloc(n*sizeof(int))?

InformationsquelleAutor der Frage Jorge Leitão | 2012-05-13

Schreibe einen Kommentar