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