Massif (from valgrind) is one of the best way to find memory leaks. Repeat your suspicious code (or run your program long enough) and dump the result with ms_print. Usually, the call stack is giving you enough information to fix it.
With GDB, you can try to attach to a running program and call functions such as malloc_stats()
If your program is written in a different language, it might be more tricky. Recently, some GDB has gained scriptability, and people started interesting projects such as gdb-heap, which can analyze Python memory from a core dump. Similar memory analysys scripts might be possible for C++ objects.
Read also http://stackoverflow.com/questions/2564752/examining-c-c-heap-memory-statistics-in-gdb