Сегодня я помогал своему другу с кодом на 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))?