1

我遇到了这个奇怪的问题。基本上我有一个永远循环的循环,在循环开始时我打开一个文件,我向文件中写入一些内容,然后在循环结束时关闭文件。在循环的第一次迭代中工作正常,但在第二次迭代中我得到

*** 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的人可以解释一下这里发生了什么吗?

4

1 回答 1

9

fclose 不会使文件指针为 NULL。它只是关闭文件。所以在第二次迭代中,文件没有打开,因为数据不是 NULL。

于 2012-05-29T05:04:26.380 回答