Разница между типом массива и массивом, выделенным с помощью malloc

Сегодня я помогал своему другу с кодом C, и я обнаружил странное поведение, которое я не мог объяснить ему, почему это происходит. У нас был файл TSV со списком целых чисел, с int каждой строкой. Первая строка - это количество строк в списке.

У нас также был файл c с очень простым «readfile». Первая строка была прочитана, количество строк, затем произошла инициализация:

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

и, наконец, цикл для n с помощью fscanf.

Для маленьких n (до ~ 100.000) все было хорошо. Тем не менее, мы обнаружили, что когда n было большим (10 ^ 6), произошла ошибка.

Наконец, мы изменили инициализацию списка на

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

и все, когда хорошо, даже с очень большим п.

Кто-нибудь может объяснить, почему это произошло? что вызвало segfault с int list [n], которое было остановлено, когда мы начали использовать list = malloc (n * sizeof (int))?

Ответы на вопрос(9)

Ваш ответ на вопрос