tmyymmt3C++@Linuxなプロジェクトでメモリリークが発生。MemProf、mtrace、ccmalloc、mpatrol、dmallocをチェックしたが、プロジェクトの環境で使えるのはmtraceだけだった。new/deleteの場合はリークの存在は確認できるがソースファイル名と行番号までは出力されず(malloc/freeの場合は行番号まで出力される)。dmallocはc++のnew/deleteでも利用可能らしいのだが、いざ対象のプログラムとリンクしようとするとリンクエラーで使えない。関連情報を調べたあげく、仕方ないので自分でコードを書いてみた。DetectMemoryLeaks.hDetectMemoryLeaks.cppMemoryLeaksSample.cpp内容としては、new、new[]、delete、delete[]、をオーバーライドまたはオーバーロードして、メモリの確保と解放のタイミングで対応をチェック。メモリ確保したのに解放されていない場合は、そのメモリを確保したソース上のファイル名と行番号を表示する。DetectMemoryLeaks.cppをコンパイル対象に追加。最初にコンパイルされるソースに次の2行を追加。メモリーリークをチェックしたい範囲の開始位置に次の1行を追加。メモリーリークをチェックしたい範囲の終了位置に次の1行を追加。対象をコンパイルして、実行すればOK。使い方のサンプルはこちら(MemoryLeaksSample.cpp)。注意:マルチスレッドは考慮していません。detectMemoryLeaksStart/End呼び出しの入れ子は考慮していません。false;detectMemoryLeaksMemoryMap.clear();}にしても、今時C++を使うのは正直どうかと。メモリやCPUが限られた条件では仕方ないかもしれないが。チームでソフトを作る際にC++を使うと細かいことまで事前に決めないとぐちゃぐちゃになるし。各種ライブラリも構成やネーミングに統一感無いし。ハードの性能向上速度、メンバーの教育、コーディングルールの策定と厳守、デバッグ、可読性を考慮して、ソフトのサイクルをトータル的考えると効率が悪い。GCの最大時間が保障されたJavaVM使った方がトータルコストも下がるし安全だし効率が良いと思う。(GC領域を限定すれば時間保障は確保できるだろう。