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))?