もちゅるの日常

特に決まっていないざっくばらんなブログ

メモリリークの検出方法

 プログラム開始時に以下のコードを追加

_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 専用。