Assume I have the following program:
#include <stdio.h>
int main () {
FILE * pFile;
pFile = fopen ("myfile.txt","r");
fclose (pFile);
//This never happens: free(pFile)
return 0;
}
I have never seen a program which does free(pFile) after closing the file handle. Why is that?
I know that since fclose() doesn't receive a pointer to pFile, then it doesn't actually free the pointer's memory. I was under the impression that pointers should always have their memory freed if they are pointing to dynamically allocated memory. Why doesn't anyone free() the file pointer?
freeis called in response tomallocto return allocated memory.fopenlikely indeed does do some mallocing, but the act of closing the handle (fclose) is, by design, going to clean up everythingfopendid. The contract you have withfopenis that closing the handle will free all outstanding resources.The general rule of thumb is for every
allochave afree. If you call a function which does analloc, it's description should warn you of what the caller is responsible for freeing.Long story short,
fclosewill clean up any resources created byfopen.