Сегодня я помогал моему другу с некоторым кодом C, и я обнаружил странное поведение, что я не мог объяснить ему, почему это происходит. У нас был TSV файл со списком целых чисел, с int каждой строкой. В первой строке было количество строк, которые имели список.
У нас также был c файл с очень простым "readfile". Первая строка была прочитана в n, количество строк, затем была инициализация:
int list[n]
и, наконец, цикл for из n с fscanf.
Для маленьких n (до ~ 100.000) все было в порядке. Однако мы обнаружили, что когда n было большим (10 ^ 6), произойдет segfault.
Наконец, мы изменили инициализацию списка на
int *list = malloc(n*sizeof(int))
и все, когда хорошо, даже при очень большом n.
Может кто-нибудь объяснить, почему это произошло? что вызывало segfault с int list [n], который был остановлен, когда мы начинаем использовать list = malloc (n * sizeof (int))?