gpt4 book ai didi

C:第 252 次尝试时 rewind() 段错误

转载 作者:行者123 更新时间:2023-11-30 16:59:16 26 4
gpt4 key购买 nike

我正在编写一些代码,输入“岛屿”(网格上的连接点)的网格坐标并找到每个岛屿的质心。该代码对于具有一些大岛屿的网格是成功的,但是对于具有许多小岛屿的网格来说是失败的。

我已将问题范围缩小到 rewind() 在第 252 次循环时失败。我不知道为什么它会失败,因为我已经通过事先打印坐标来验证岛 # 252 是否存在,如果我跳过 252,代码会在岛 253 上失败,所以我相信它只是在使用 252 次后倒带失败。 p>

代码相当大,所以我会尝试只发布相关部分:

FILE *f;

if((f = fopen(argv[1], "r")) == NULL)
{
printf("Could not open file to read.\n");
return 0;
}
while(!feof(f))
{
fscanf(f, "%d %d %d\n", &current_x, &current_y, &island_number);
if(island_number > number_of_islands)
{
number_of_islands = island_number;
}
}
fclose(f);

这是使用 f 时的第一个实例,但稍后再次使用它,并在下面的 for 循环中再次使用,这就是问题出现的地方:

for( int i = 0; i < number_of_islands; i++)
{
printf("new loop: %d (number of islands: %d) \n", loop, number_of_islands);

if(loop == 252)
{
printf("putting in x, y at 252...\n");
}

这是代码失败的地方......

//putting numbers in x and y
rewind(f = fopen(argv[1], "r"));

这是以下部分的一些内容(可能不重要):

if(loop == 252)
{
printf("rewound at 252...\n");
exit(0);
}


while(!feof(f))
{
fscanf(f, "%d %d %d\n", &current_x, &current_y, &island_number);

if(island_number == current_island_number)
{
x_array[current_x] += 1;
y_array[current_y] += 1;

}
}

if(loop == 252)
{
printf("finished putting in x, y at 252...\n");
exit(0);
}

输出的示例如下:

Everything looks good, except for the sudden segfault.

所以我的问题是,为什么 rewind() 在第 252 次尝试时突然出现段错误?

最佳答案

这个:倒带(f = fopen(argv[1], "r"));不倒带 f.相反,它为 f 分配一个新值,打开同一个文件并倒回它(尽管它刚刚被打开)。在某些系统上,您可以打开的文件描述符是有限的。为什么是252?我猜你的限制是 256,内核可能会使用剩下的 4 个。要解决该问题,您可以先关闭文件,或者:

rewind(f);

这应该可以在不重新分配 f 的情况下工作。

关于C:第 252 次尝试时 rewind() 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38285759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com