藉助MFC工程進行內存泄漏分析

在我們的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更加好用!

在這裏插入圖片描述

發佈了114 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章