撩欢,黑龙江省政府采购网,虾球潭
定位内存泄漏是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
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论