我遇到了这个奇怪的问题。基本上我有一个循环永远循环,在该循环的开始我打开一个文件,我写了一些东西到文件,然后在循环结束我关闭文件。适用于循环的第一次迭代,但在第二次迭代中我得到
*** 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更精通C的人能解释一下这里发生了什么吗?
答案 0 :(得分:9)
fclose不会使文件指针为NULL。 它只是关闭文件。 所以在第二次迭代中,文件没有打开,因为数据不是NULL。