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

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

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

int list[n]

и, наконец, цикл for n с fscanf.

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

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

int *list = malloc(n*sizeof(int))

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

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

61
задан bolov 23 June 2017 в 07:57
поделиться