Разница между типом массива и массивом, выделенным с помощью 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))?