Dynamic storage allocation plays an important role in C programming;
it is also the breeding ground of numerous hard-to-track-down bugs.
Freeing an allocated block twice, running off the edge of the
malloc'ed buffer, and failing to keep track of addresses of allocated
blocks are common errors which frustrate the programmer - debugging
them is very difficult due to the errors manifesting themselves
as "mysterious behavior" at places far off from the point where the
programmer actually committed the blunder.