我试图将文件中的前两个数字存储为变量,然后将剩余的数字存储在数组中的文件中。
以下代码在较小的输入上可以正常工作,但是我想知道-为什么在较大的输入文件上会出错?在获得Segmentation Fault:返回11之前,我能够打印出for循环中的所有值。
FILE * fp;
fp = fopen("test.text", "r");
int i;
fscanf(fp, "%d", &i);
int param1 = i;
fscanf(fp, "%d", &i);
int param2 = i;
int list[param2];
int j;
for (j = 0; j < param2; j++) {
fscanf(fp, "%d", &list[j]);
}
fclose(fp);
答案 0 :(得分:2)
@ForceBru已经简要评论过,这是read -t 1 -n 10000 discard
read -p "Give me some input: " input
当这样声明一个列表时,缓冲区存储在堆栈中,只需通过编译器将堆栈指针增加param2数量即可进行分配。
如果使用在缓冲区之后分配的j进行编译,则可能是这种情况,计算机将访问位置int list[param2];
来存储0(j = 0)。
堆栈是有限的,因此此站点的名称是,当访问堆栈之外的缓冲区时,内核只会看到您在远离任何合法内存的地方写东西,并且会认为出了点问题。 / p>
对于大型缓冲区,请看一下malloc。