Visual Studioで_CrtDumpMemoryLeaks関数を呼べば、メモリリークを検出してダンプしてくれる。さらに次のようにしてnewを呼び出すことによって、そのメモリを確保したソースの場所を表示してくれる。
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
例えば次のようなコードを実行した場合、
#include "stdafx.h" #include <crtdbg.h> #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) int _tmain(int argc, _TCHAR* argv[]) { int* p = new int(); _CrtDumpMemoryLeaks(); return 0; }
VisualStudioの出力ウィンドウには次のように表示される。
Detected memory leaks! Dumping objects -> c:\test.cpp(7) : {112} normal block at 0x005F8048, 4 bytes long. Data: < > 00 00 00 00 Object dump complete.
リークしているメモリを確保したソースの場所を表示してくれる。さらにその行をダブルクリックすれば、その場所へジャンプすることもできる。