今天我正在帮助我的一个朋友编写一些 C 代码,我发现了一些奇怪的行为,我无法向他解释为什么会发生这种情况。我们有一个包含整数列表的 TSV 文件,int
每行都有一个。第一行是列表的行数。
我们还有一个带有非常简单的“readfile”的 ac 文件。第一行被读取到n
,行数,然后有一个初始化:
int list[n]
最后是n
带有 a的 for 循环fscanf
。
对于小 n (直到〜100.000),一切都很好。但是,我们发现当 n 很大 (10^6) 时,会发生段错误。
最后,我们将列表初始化更改为
int *list = malloc(n*sizeof(int))
一切都很好,即使非常大n
。
有人可以解释为什么会这样吗?是什么导致了段错误int list[n]
,当我们开始使用时停止了list = malloc(n*sizeof(int))
?