2


1

CのVisual Studio 2008ですべてのメモリが解放されたことを確認したいです。 私はいくつかのインクルードを追加し、多分何らかのコード行を書くことができると聞きました。

誰もが私がそれを行うことができる方法を知っていますか?

前もって感謝します、

グレッグ

5 Answer


5


このような何かはあなたが探しているものかもしれません。

#define _CRTDBG_MAP_ALLOC #include #include

int main(){malloc(100); _CrtDumpMemoryLeaks(); 1を返します。 }


1


最も古い方法の1つは、new演算子とdelete演算子をオーバーライドすることです(すべてのヒープ割り当てがnewを通じて行われると想定しています)。 オーバーロードされたnewおよびdelete演算子の中に階層的に配置されたプリントアウトを使用すると、終了前に確実にクリーンアップすることができます。 しかしこれは少しトリッキーかもしれません。あなたはnewをオーバーロードしてグローバルスコープで削除したくなるでしょう。 しかし、これは他の説明されていないバグを引き起こす可能性があります(もちろんデバッグモードでオーバーロードされた演算子だけを使っているでしょう、大丈夫です)あなたのクラススコープにそれを保ってください。

もう一つの賢い方法はauto_ptrを使うことです。 削除したことを確認したいポインタは、スタック上のauto_ptrテンプレートのオブジェクトに格納されています。 そのため、このオブジェクトがスコープ外に出ると、それとともに格納されているポインタを受け取ります。

それでもリークが心配な場合は、windbgを使って学習してみてください。 あなたがメモリリークを識別するのを助けるその素晴らしいツール。 私はそれがハンドルによって引き起こされる漏れを見つけることが本当に効率的であるとわかりました。


0


"crtdbg.h"をインクルード

そして使う

_CrtDumpMemoryLeaks()

crtdbgで他の便利な方法を探すこともできます。


0


私はVC 2003用の似たようなツールを探していて、Software Verify( www.softwareverify.com)によってMemoryCheckerに出会いました。 無料ではありませんが、非常に手ごろな価格です(Purify and Bounds Checkerよりも安い)。 まだ評価中ですが、使用した部分は非常に印象的です。 30日間の無料トライアル

メモリエラー(delete []などの代わりにdelete)、リークメモリ、メモリホットスポットなどを追跡できます。 以前にこんなものを使ったことがないので、かなりクールだと思っています:)


0


http://www.codeproject.com/KB/cpp/MemLeakDetect.aspx[Memory Leak Detection]に役立つ http://www.codeproject.com/KB/cpp/MemLeakDetect.aspx[CodeProject]には、素晴らしい(無料の)ユーティリティクラスがあります。 私はそれがメモリリークでいっぱいだったいくつかのレガシーコードを扱うとき非常に有用であるとわかりました。

auto_ptrと RAAIを使用して新しいコードがリークするのを防ぐのが一般的な方法です。