Some static code analyzers will check for potential memory leaks.
PC-Lint isn't very expensive (a few hundred bucks). Coverity is better
but is much more expensive. I think turning the Visual C++ compiler
warning level all the way up (to 4) will find some potential problems.
Other compilers might be able to detect potential memory leaks also.
Sysinternals.com has some tools that might help. I tracked down a
handle leak using their task manager replacement. Microsoft also has a
tool called umdh which I haven't used but I know others that have.
btw: The company I worked for evaluated Coverity. It ran for a day and
located a bunch of problems, one of which was a memory leak that one of
my coworkers had just spent a month (on and off) tracking down, not to
mention the customer, customer support, etc. I think that PC-Lint and
the other static code analyzers might have found it also.
The other thing is that there are ways to reduce the odds of a memory
leak occurring. I don't know if you do this or not, but using libraries
such as the stl, instead of rolling your own, using a string class
instead of char *, using object that autorelease your locks, handles,
close files, etc. for you and catching and handling exceptions will
help. If you are not doing these, then detecting memory leaks is like
patching the Titanic with a bandaid. It is better to prevent the
problem than patch the holes one by one.