c - fclose() 然后是 free()?

标签 c file memory free fclose

假设我有以下程序:

#include <stdio.h>

int main () {
    FILE * pFile;
    pFile = fopen ("myfile.txt","r");

    fclose (pFile);
    //This never happens: free(pFile)
    return 0;
}

我从未见过在关闭文件句柄后执行 free(pFile) 的程序。这是为什么呢?

我知道由于 fclose() 没有收到指向 pFile 的指针,因此它实际上并没有释放指针的内存。我的印象是,如果指针指向动态分配的内存,则应该始终释放它们的内存。为什么没有人 free() 文件指针?

最佳答案

free 被调用以响应 malloc 以返回分配的内存。 fopen 可能确实做了一些 mallocing,但是关闭句柄 (fclose) 的行为,按照设计,会清理所有 fopen做过。您与 fopen 的约定是关闭句柄将释放所有未完成的资源。

一般的经验法则是每个alloc 都有一个free。如果你调用一个执行 alloc 的函数,它的描述应该警告你调用者负责释放什么。

长话短说,fclose 将清理由 fopen 创建的所有资源。

关于c - fclose() 然后是 free()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954485/

相关文章:

java - 在Java中,如何分配给定数量的内存,并保留它直到程序退出?

C,在大小为 15 的无符号整数数组的空间中存储长度 <=60 的字符串

c - 使用数据镜像保护数据损坏

c# - 在Windows服务C#中访问网络路径

windows - 如何限制应用程序可以分配的内存

c# - 获取内存值数组的最快方法

c - 了解 C 的排序算法

c 编译器有一个函数卡在其命名空间中(也许?)。苹果

php - 文件上传不工作 | PHP

ruby - 在 Ruby 中使用 '+' 文件 IO 模式替换文件中的一行