Diferença entre o tipo de array e array alocado com malloc

Hoje eu estava ajudando um amigo meu com algum código em C, e encontrei um comportamento estranho que não consegui explicar por que estava acontecendo. Nós tínhamos um arquivo TSV com uma lista de inteiros, com um int em cada linha. A primeira linha era o número de linhas que a lista tinha.

Nós também tínhamos um arquivo c com um "readfile" muito simples. A primeira linha foi lida para n, o número de linhas e, em seguida, houve uma inicialização de:

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

e finalmente um loop for de n com um fscanf.

Para n pequenos (até ~ 100.000), tudo estava bem. No entanto, descobrimos que quando n era grande (10 ^ 6), ocorreria um segfault.

Finalmente, mudamos a inicialização da lista para

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

e tudo bem, mesmo com n muito grande.

Alguém pode explicar por que isso ocorreu? o que estava causando o segfault com int list [n], que foi interrompido quando começamos a usar list = malloc (n * sizeof (int))?

questionAnswers(9)

yourAnswerToTheQuestion