[Visual C++] メモリリークを検出する

MFCを使用している時は良いが、それ以外の時はデバッグモードでメモリリークを検出してくれない。

これについては、Microsoft のサイトにも説明がある。

要約すると

#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif


をプログラムの先頭に加える。stdafx.h に加えるのが良い。さらに、プログラムの終了直前に、

_CrtDumpMemoryLeaks();

を実行する。ただし、エラー終了など終了点が一定でない場合にも対応するには、main 関数(_tmain)の先頭で _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); を以下のように加える方が便利だ。

int _tmain(int argc, _TCHAR* argv[])
{
    _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    ...
    return 0;
}

ただし、 と衝突する(ヒープメモリ関係の再定義になる)ので注意が必要。