ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

メモリリークの場所をわかりやすくする

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.

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