メモリリークの検出方法
プログラム開始時に以下のコードを追加
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
ただし、これだけだと実行終了時に出力ウィンドウにリーク検出ログを吐き出してくれますが、
どこでリークしたかは、教えてくれない。
なので、new を次のように定義して使うと、リーク場所を吐き出してくれる
// メモリーリーク検出のフラグ設定 #define DETECTION_MEM_LEAK #include <crtdbg.h> #ifdef DETECTION_MEM_LEAK #define _CRTDBG_MAP_ALLOC #include <cstdlib> #ifndef NEW #define NEW ::new( _NORMAL_BLOCK, __FILE__, __LINE__ ) #endif #else #ifndef NEW #define NEW new #endif #endif DETECTION_MEM_LEAK
ただしこれは CRT 専用。