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