c - 这个指针如何同时为空和不为空?

标签 c pointers

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

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

最佳答案

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

关于c - 这个指针如何同时为空和不为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10793288/

相关文章:

c - 与 fork() 共享变量

c# - List<T> 是指针吗?

c++ - 类指针错误 : does not have a type

c - 将fork()的子级设置为前台,然后退出父级

计数预处理器宏可能吗?

c - 免费的特殊错误

c - "realloc(): invalid next size"多次成功运行后

c++ - 有向无环图的 C/C++ 实现

c - 使用二叉搜索树进行井字棋(C)

c - 释放在 block 中间声明的 C 指针(寻求相关文档)