fclose()然后free()?

Oli*_*ryn 7 c memory free file fclose

假设我有以下程序:

#include <stdio.h>

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

    fclose (pFile);
    //This never happens: free(pFile)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

我知道既然fclose()没有收到指针pFile,那么它实际上并没有释放指针的内存.我的印象是,如果指针指向动态分配的内存,指针应始终释放内存.为什么没有人free()的文件指针?

Ben*_*Ben 15

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

一般的经验法则是每个人alloc都有free.如果你调用一个函数alloc,它的描述应警告你调用者负责释放的内容.

长话短说,fclose将清理所创造的任何资源fopen.


Tza*_*ach 5

该函数的内存分配fopen取决于实现(每个 CRT)。您可以确定fclose始终会实现释放所有分配的内存fopen