Różnica między typem tablicy a tablicą przydzieloną za pomocą malloc

Dzisiaj pomagałem mojemu przyjacielowi kodem C i znalazłem dziwne zachowanie, którego nie potrafiłem mu wyjaśnić, dlaczego tak się dzieje. Mieliśmy plik TSV z listą liczb całkowitych, z każdą linią int. Pierwsza linia była liczbą linii, które miała lista.

Mieliśmy również plik c z bardzo prostym plikiem „readfile”. Pierwsza linia została odczytana jako n, liczba linii, a następnie nastąpiła inicjalizacja:

int list[n]

i wreszcie pętla for z n fscanf.

Dla małych n (do ~ 100 000) wszystko było w porządku. Jednak odkryliśmy, że gdy n było duże (10 ^ 6), wystąpiłaby segfault.

Wreszcie zmieniliśmy inicjalizację listy na

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

i wszystko dobrze, nawet z bardzo dużym n.

Czy ktoś może wyjaśnić, dlaczego tak się stało? co spowodowało segfault z int list [n], który został zatrzymany, gdy zaczniemy używać list = malloc (n * sizeof (int))?