假设我有以下程序:
#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/