この文書の現在のバージョンと選択したバージョンの差分を表示します。
実用編:ヒープのメモリリーク診断 [2012/04/18 18:30] admin |
実用編:ヒープのメモリリーク診断 [2013/12/23 09:08] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== ヒープのメモリリーク診断 ====== | ||
- | |||
- | マイクロソフトのCランタイムにはヒープメモリのリーク診断機能があります。 | ||
- | |||
- | stdafx.h(またはすべてのソースファイルがインクルードするヘッダファイル)に以下を追加。 | ||
- | |||
- | <code cpp> | ||
- | #if _DEBUG | ||
- | #include <crtdbg.h> | ||
- | #define malloc(size) _malloc_dbg(size, _NORMAL_BLOCK, __FILE__, __LINE__ ) | ||
- | #define calloc(s1,s2) _calloc_dbg(s1, s2, _NORMAL_BLOCK, __FILE__, __LINE__ ) | ||
- | #define realloc(p,s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) | ||
- | #define free(p) _free_dbg(p, _NORMAL_BLOCK) | ||
- | inline void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine) | ||
- | { | ||
- | return _malloc_dbg(nSize, _NORMAL_BLOCK, lpszFileName, nLine); | ||
- | } | ||
- | inline void operator delete(void *p) | ||
- | { | ||
- | _free_dbg(p, _NORMAL_BLOCK); | ||
- | } | ||
- | #define DEBUG_NEW new(__FILE__, __LINE__) | ||
- | #define new DEBUG_NEW | ||
- | #endif | ||
- | </code> | ||
- | main()の最初に以下のコードを追加。 | ||
- | <code cpp> | ||
- | #ifdef _DEBUG | ||
- | _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); | ||
- | #endif | ||
- | </code> | ||
- | このようにすることで、プログラムの終了時、もしメモリリークがあった場合デバッガのアウトプットウインドウにそれが表示されるようになります。 |