定位記憶體泄漏是C++的一個棘手問題,可行的方法之一如下: 在debug模式下,在輸出中可以看到如下信息: 請註意大括弧{}中的內容,此處是{156},這就是程式可能記憶體泄露的地方。 將上面註釋的代碼加入,並將大括弧中的數字填入,就可以讓程式停在記憶體泄漏的地方。 如下,這裡我讓程式停在156處: 參考 ...
定位記憶體泄漏是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