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.リークしているメモリを確保したソースの場所を表示してくれる。さらにその行をダブルクリックすれば、その場所へジャンプすることもできる。