マイクロソフトのCランタイムにはヒープメモリのリーク診断機能があります。
stdafx.h(またはすべてのソースファイルがインクルードするヘッダファイル)に以下を追加。
#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
main()の最初に以下のコードを追加。
#ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); #endif
このようにすることで、プログラムの終了時、もしメモリリークがあった場合デバッガのアウトプットウインドウにそれが表示されるようになります。