今天我在帮助我的一个朋友处理一些C代码,我们遇到了一些奇怪的行为,我无法解释为什么会发生这种情况。我们有一个包含整数列表的TSV文件,每行一个int
。 第一行是列表中行数的数量。
我们还有一个非常简单的“readfile” c文件。第一行读取 n
,即行数,然后进行初始化:
int list[n]
最后使用fscanf
做一个包含n
的for循环。对于小的n
(直到约100,000),一切都正常。但是我们发现当n
很大(10^6)时,会发生段错误。
最终,我们将列表初始化更改为
int *list = malloc(n*sizeof(int))
一切都很顺利,即使处理非常大的n
也没有问题。
有人能解释一下为什么会出现这种情况吗?为什么使用int list[n]
时会导致段错误,在使用list = malloc(n*sizeof(int))
后就停止了呢?