在我們的CPP文件中請加入下面幾行代碼:
#include "stdafx.h"
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define free(p) _free_dbg(p, _NORMAL_BLOCK)
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
(注意這些調試工具,其實是MFC Debug模式下,由MFC進行提供的支持,因此開發環境必須是MFC環境.)
new的分析其實是藉助 DEBUG_NEW來進行分析的.
後面的free/malloc 都要進行重定義,這樣malloc出現了內存泄漏我們也可以捕捉到,進入到Debug模式下的調試。
一定要手動:
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, FILE, LINE)
原因我也不清楚,下面是我調試測試的結果:
高級應用說明:
一般我是藉助vld來進行分析內存泄漏的:
https://kinddragon.github.io/vld/
然後在我們的頭文件中添加 :
#include <vld.h>
注意這個添加的位置一定要在 #include <afxwin.h> 前面.
最後的輸出效果圖 :
在某些情況下,就算 Debug New無法幫我們定位出所在的行,這個工具也是可以幫助我們的.
不過還是感覺linux的內存分析工具–valgrind更加好用!