回答:
ソースコードを変更できる場合は、Dmallocが最適です。解放されなかったポインターと(デバッグシンボルでビルドされたコードの場合)割り当てられた行が正確にリストされます。
できない場合は、Valgrindがそのようなものの標準となっています。私は通常、Valgrindを使用するのが少し難しいと思いますが、機能がはるかに多く、コードにdmalloc呼び出しを追加する必要はありません。
Massif(valgrindから)は、メモリリークを見つけるための最良の方法の1つです。疑わしいコードを繰り返し(またはプログラムを十分に長く実行して)、ms_printで結果をダンプします。通常、呼び出しスタックはそれを修正するのに十分な情報を提供しています。
GDBを使用すると、実行中のプログラムにアタッチして、次のような関数を呼び出すことができます。 malloc_stats()
プログラムが別の言語で書かれている場合は、よりトリッキーになる可能性があります。最近、一部のGDBはスクリプト機能を獲得しており、人々はコアダンプからPythonメモリを分析できるgdb-heapなどの興味深いプロジェクトを開始しました。同様のメモリ分析スクリプトがC ++オブジェクトに対して可能である場合があります。
/programming/2564752/examining-cc-heap-memory-statistics-in-gdbもお読みください
Solarisの場合、このStackOverflowの質問への回答にいくつかのツールがリストされています(これらのツールには、他の形式の不良メモリアクセスとのリークチェックが含まれています)。
私はしばらくの間Objective-Cを行っていますが、Cレベルのメモリ管理などを扱うアナライザーがあります。Clang Static Analyzerは非常に優れているため、AppleはそれをxCode IDEにバンドルすることにしました。これがあなたの質問に適しているかどうかはわかりませんが、Cを実行している場合は、試す価値があります。