### Question 7.21

Why isn't a pointer null after calling `free`?
How unsafe is it to use (assign, compare) a pointer value after it's 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 remains unchanged, because C's pass-by-value semantics mean that called functions never permanently change the values of their arguments. (See also question 4.8.)

A pointer value which has been freed is, strictly speaking, invalid, and any use of it, even if is not dereferenced can theoretically lead to trouble, though as a quality of implementation issue, most implementations will probably not go out of their way to generate exceptions for innocuous uses of invalid pointers.

References: ANSI Sec. 4.10.3
ISO Sec. 7.10.3
Rationale Sec. 3.2.2.3

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback