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