Especially when it's in an external library, like say, perl. It's a recipe for heap corruption when pointers allocated by the real malloc are passed to the redefined free and vice versa. Nasty. Whats worse is when that library redefines malloc(), free(), calloc() and realloc(), but leaves strdup() alone.
Guess how long it took to track that one down on windows, where valgrind is sorely missed? Too long, that's how long.
How did we live without valgrind!?
Before the days of valgrind I used to have to manually try and debug my badly written c code by adding a zillion and one lines to print some text to figure out where the issue is in the source code :P
