检测内存泄露
VS的C Run-Time Libraries支持內(nèi)存調(diào)試。對于MFC程序,VS自動添加
#ifdef _DEBUG #define new DEBUG_NEW #endif在cpp文件開頭,出現(xiàn)內(nèi)存泄露時(shí)就能報(bào)告相應(yīng)的錯(cuò)誤信息。
?
對于非MFC程序,主要工具是調(diào)試器和C Run-Time Libraries的debug heap函數(shù)。
要使用這些函數(shù),需設(shè)置如下步驟:
- 使用程序調(diào)試版本,C運(yùn)行時(shí)刻函數(shù)庫也選擇調(diào)試版本;
?
- 在程序中添加設(shè)置代碼,stdafx.h開頭是個(gè)合適的位置。 #ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
crtdbg.h:通過include此文件將 malloc 和 new 替換為他們的debug版本, _malloc_dbg和 _free_dbg,跟蹤內(nèi)存的分配和釋放。
_CRTDBG_MAP_ALLOC:將CRT的heap函數(shù)替換為對應(yīng)的debug版本,設(shè)置此參數(shù)能使內(nèi)存泄露檢查提供更多信息。
?
- 在程序開頭添加: #ifdef _DEBUG_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF // 啟動堆分配檢查| _CRTDBG_LEAK_CHECK_DF ); // 程序結(jié)束時(shí)__CrtDumpMemoryLeaks自動調(diào)用
#endif
?
附相關(guān)鏈接,詳細(xì)敘述了調(diào)試堆方法:1、MSDN中關(guān)于檢測內(nèi)存泄露的說明:http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=VS.80%29.aspx
2、CRT調(diào)試堆:http://blog.csdn.net/ugg/article/details/1585639
轉(zhuǎn)載于:https://www.cnblogs.com/TheDaughterOfTime/archive/2012/04/11/2441293.html
總結(jié)
- 上一篇: 深入探讨用位掩码代替分支(7):MMX指
- 下一篇: native-maven-plugin与