Purify, from Rational Software Corporation (now part of IBM). A tool which when used with C/C++ catches memory leaks, stray pointers, and all other sorts of nastiness in C/C++.
Essentially, it's a tracing garbage collector used in debug mode--it never frees anything; it just notes when an object is garbage or not. If an object ever becomes garbage (without being deleted first), that's a memory leak. If the tracer find pointers pointing to things which have been freed--there's a wild pointer.
Quite a useful little tool....
Has lot of problems instrumenting libraries that are loaded with dlopen(). Make sure that you run an instrumented executable with exactly same shared libraries