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