<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href='base.xsl'?>

<desc title="メモリリークをチェックする">

	注）このサンプルはわざとメモリリークを発生させます。<r/>

	<r/>

	<source>
#define _CRTDBG_MAP_ALLOC
#include &lt;crtdbg.h&gt;

int main( void )
{
	int *p;
	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
	p = (int*)malloc(10);
	return 0;
}
	</source>

	<r/>

	詳細は全て MSDN ライブラリに書かれています。

	<list>
		<item>
			MSDN _CrtSetDbgFlag(CRT)<r/>
			<link url='http://msdn.microsoft.com/ja-jp/library/5at7yxcs(VS.80).aspx'>http://msdn.microsoft.com/ja-jp/library/5at7yxcs(VS.80).aspx</link>
		</item>
	</list>

	メモリリークを検出すると、出力ウィンドウに以下の文章が表示されます。<r/>

	<image file='API__CrtSetDbgFlag.png' width="720" height="162" alt="メモリリーク検出時の出力内容"/><r/>

	<r/>

	Detected memory leaks!<r/>
	Dumping objects -&gt;<r/>
	ファイル名(発生した行数) : {?} normal block at リークしたポインタのアドレス, バイト数 bytes 型.<r/>
	 Data: &lt;ASCII表示？&gt; データの内容(１６進数)<r/>
	Object dump complete.<r/>

	<r/>

	検出できるのは malloc(), realloc(), free() に対してです。<r/>
	GlobalAlloc() と HeapAlloc() を使ってテストしましたが、
	MSDN に書かれている通り、検出できませんでした。<r/>

	<r/>

	GlobalAlloc() など Win32 API 関数に対しては、
	自分で検出用の関数を作るか、
	メモリリークを検出してくれるソフトウェアを使うか、
	ライブラリを組み込んだ方が良さそうです。

</desc>

