Correct usage of free() function in C
Think that the computer has a whole bunch of memory not (yet) used by your program. Now you need some more memory and you ask your computer to give you some more (for example, a large buffer). Once you are done with it, you want to return it to the computer.
This memory is called the heap. You ask for memory by calling malloc()
and you return it by calling free()
;
char *buffer;
buffer = malloc(512); // ask for 512 bytes of memory
if (buffer==NULL) return -1; // if no more memory available
...
free(buffer); // return the memory again
You should call free only on pointers which have been assigned memory returned by malloc
, calloc
, or realloc
.
char* ptr = malloc(10);
// use memory pointed by ptr
// e.g., strcpy(ptr,"hello");
free(ptr); // free memory pointed by ptr when you don't need it anymore
Things to keep in mind:
Never free memory twice. This can happen for example if you call
free
onptr
twice and value ofptr
wasn't changed since first call tofree
. Or you have two (or more) different pointers pointing to same memory: if you call free on one, you are not allowed to callfree
on other pointers now too.When you free a pointer you are not even allowed to read its value; e.g.,
if (ptr)
not allowed after freeing unless you initializeptr
to a new valueYou should not dereference freed pointer
Passing null pointer to
free
is fine, no operation is performed.