2012-02-10 8 views
0

C++でメモリリークを自動的に検出する方法はありますか?私はちょうど作成や削除を追跡するためにNEWやDELETEのようなマクロを使うことができるテンプレートソリューションを探しています。それは、Mac、Linux、およびWindows上で動作する必要があります。C++でメモリリークを自動的に検出するにはどうしたらよいですか?

+4

診断情報を収集したり、メモリリークを追跡するために、 'new'と' delete'を置き換えることを検討するかもしれません。グッドリード:[なぜ、デフォルトの新規および削除演算子を置き換えるのですか?](http://stackoverflow.com/questions/7149461/why-should-one-replace-default-new-and-delete-operators)&[ISO C++標準に準拠したカスタムの新規および削除演算子の作成方法は?](http://stackoverflow.com/questions/7194127) /how-should-i-write-iso-c-standard-conformant-custom-new-and-delete-operators/).Noteこれは実際に自動的な方法ではありません。 –

+2

実現するべきことは、それらをポータブルな方法で検出する必要がないことです。コード自体が移植性がある場合は、あるプラットフォームでそれらを検出する(およびそれらを押しつぶす)と、他のプラットフォームも同様に削除する必要があります。 –

+1

@MatthieuM .:残念ながら、バグはコンパイラ/プラットフォーム固有のことがよくあります。 –

答えて

3

多くのツールがあります。例えば、dmallocのような特別なライブラリはlibfenceのようなライブラリです。特にLinuxではValgrindが非常に便利です。

だから、おそらくあなたはいくつかのmallocデバッグライブラリのソースコードを入手し、それをあなたのすべての開発に使用するのが最良の "賭"です。

2

LinuxおよびMac OSXではvalgrind、WindowsではMicrosoft Application Verifierを実行することをお勧めします。どちらのツールも無料です。

コードで実行したい場合は、マップ内の割り当てを追跡できます。プログラム出口では、地図が空であるかどうかを確認するだけです。マクロを使用する場合は、割り当てレコードとともにソース行とファイルをマップに格納できます。私はしかし、ツールを使用すると、より簡単であると信じています。彼らは新しい/削除を追跡するだけでなく、コードを変更する必要もなく、あなたを助けることができます。

+1

ほとんどのツールとデバッグCRTは、新しい/削除(/ malloc/realloc/free)を多かれ少なかれ追跡します。彼らはしばしば組み込みの追跡が可能な漏れの原因に関するデータを明らかにすることができません。 – ssube

+0

ツールは、解放されていないメモリが割り当てられた場所をソース内で指定できます。何をもっとしたいですか? – rasmus

関連する問題