Possible Duplicate:
Setting variable to NULL after free …
I am learning about good C programming practices and my friend told me to always set the pointers to NULL after free()ing them (or calling a specific freeing function).
For example:
char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
or
struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
Why is this a good practice?
Update: After reading the answers, it seems an awful practice to me! I am hiding possible double-free() errors. How can this possibly be a good practice? I am shocked.
Thanks, Boda Cydo.
Bad practice vote from me. If you do want to assign a value, set it to (void*)0xdeadbeef. Check what your CRT can do first though. A decent debug allocator will set freed memory to a pattern that's likely to cause a bomb when the pointer is used after it was freed. Albeit that it isn't guaranteed. But then not changing the pointer value is the better (and faster) solution.
While it can't hurt, it doesn't always help. The issue to consider is that it's easy for there to be multiple copies of the pointer and most likely you are only going to set a single one to NULL. The classic example of where it doesn't help at all is:
void free_graph(graph *g)
{
...
free(g);
g = NULL; // not useful in this context
}
The problem here is that you are only setting the pointer that is local to free_graph
to NULL and the pointer is held by the caller of free_graph
will still have it's original value.
This is considered a good practice by some because it prevents you from accidentally accessing the memory after it has been free()ed.
I think yes ...
When you have finished using a portion of menory , we should free() it.This allows the memory freed to be used for some other purposes...like further malloc() calls.
Free takes a pointer to the memory as an argument and frees the memory to which the pointer refers to...
Hope this helps ... :)