C Interview Questions and Answers


Why is not a pointer null after calling free? How unsafe is it to use (assign, compare) a pointer value after it is been freed?

When you call free, the memory pointed to by the passed pointer is freed, but the
value of the pointer in the caller probably remains unchanged, because C's
pass-by-value semantics mean that called functions never permanently change the
values of their arguments. A pointer value which has been freed is, strictly speaking,
invalid, and any use of it, even if it is not dereferenced (i.e. even if the use
of it is a seemingly innocuous assignment or comparison), can theoretically lead
to trouble. (We can probably assume that as a quality of implementation issue, most
implementations will not go out of their way to generate exceptions for innocuous
uses of invalid pointers, but the Standard is clear in saying that nothing is guaranteed,
and there are system architectures for which such exceptions would be quite natural.)

When pointer variables (or fields within structures) are repeatedly allocated and
freed within a program, it is often useful to set them to NULL immediately after
freeing them, to explicitly record their state.

Posted by:Richards