vs2017 如何定位C++內存泄漏


定位內存泄漏是C++的一個棘手問題,可行的方法之一如下:

//在主函數文件中加入如下代碼

#include <stdlib.h>  
#include <crtdbg.h>  
  
  
#ifdef _DEBUG  
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)  
#endif  
  
void EnableMemLeakCheck()  
{  
    int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);  
    tmpFlag |= _CRTDBG_LEAK_CHECK_DF;  
    _CrtSetDbgFlag(tmpFlag);  
}  
  
using namespace std;  
int main()  
{  
    EnableMemLeakCheck();  
    //_CrtSetBreakAlloc(這里有第一遍注釋掉, 第二遍再執行);  
        自己的代碼  
}  

在debug模式下,在輸出中可以看到如下信息:

請注意大括號{}中的內容,此處是{156},這就是程序可能內存泄露的地方。

將上面注釋的代碼加入,並將大括號中的數字填入,就可以讓程序停在內存泄漏的地方。

如下,這里我讓程序停在156處:

//在主函數文件中加入如下代碼

#include <stdlib.h>  
#include <crtdbg.h>  
  
  
#ifdef _DEBUG  
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)  
#endif  
  
void EnableMemLeakCheck()  
{  
    int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);  
    tmpFlag |= _CRTDBG_LEAK_CHECK_DF;  
    _CrtSetDbgFlag(tmpFlag);  
}  
  
using namespace std;  
int main()  
{  
    EnableMemLeakCheck();  
    _CrtSetBreakAlloc(156);  
        自己的代碼  
}  

參考:https://www.cnblogs.com/luruiyuan/p/6916634.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM