【发布时间】:2015-01-13 06:58:01
【问题描述】:
假设我有以下程序:
#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()文件指针?" - 因为这是完全错误的。 -
free()也没有收到指向其参数的指针。 -
首先,您不想在文件描述符表上调用 free(其中 FILE * 指向该表中的某个条目)其次,您只在一个指针上调用 free()由 malloc() 系列函数之一设置(某些函数,如 dup() 在后台使用 malloc,因此需要释放结果指针)
-
当您将 pFile 传递给 fclose 时,您将传递一个 FILE*。所以 fclose 当然可以免费调用它,它的效果就像你自己做的一样。然而,实际发生的事情要复杂得多。