我遇到了这个奇怪的问题。基本上,我有一个循环,永远循环,在循环的开始,我打开一个文件,我写了一些东西的文件,然后在循环结束我关闭文件。工作正常循环的第一次迭代,但在第二次迭代,我得到该指针如何在同一时间为空而不为空?
*** glibc detected *** ./prog: double free or corruption (top):
循环的第二次迭代期间,我已经缩小下来到fclose(data)
线。显然这个错误发生在你不止一次释放某些东西的时候,但是在这段代码中怎么可能呢?
while(1)
{
if (data == NULL)
{
data = fopen(data_path, "w+");
}
/* do a bunch of stuff... */
if (data != NULL)
{
fclose(data);
}
}
陌生人的事情是,如果我fclose(data)
后添加以下行的程序运行得很好,没有任何问题:
data = NULL;
可别人谁是更好地精通用C比我解释一下这是怎么回事在这?
用valgrind运行你的程序,它会自动告诉你它有什么问题。 –
在'data'上调用'fclose'不会*使数据变成NULL指针;实际上,它不会(也不能)根本改变'数据'*的值。它所做的是导致不再是数据指向的内存位置的FILE对象。 – zwol