c/c++程序内存泄漏的调试
原创
©著作权归作者所有:来自51CTO博客作者mayacong的原创作品,请联系作者获取转载授权,否则将追究法律责任
在使用MFC的时候,如果有内存泄漏,会在程序退出的时候显示在调试窗口,指出泄漏的内存是第几次分配的,就当是内存的ID吧,我们可以根据这个ID使用下面的函数找到是哪代码分配的次内存:
_CrtSetBreakAlloc(long lBreakAlloc);
lBreakAlloc就是内存ID。有了这句,程序会在分配这个内存时中断,我们就可以根据堆栈找到是那句话所分配。
如果是非MFC程序怎么办呢?那就再添加下面的代码:
_CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) |
_CRTDBG_LEAK_CHECK_DF );
这样程序就会像MFC一样打印泄漏信息。
最后给出一个完整的例子:
#include <crtdbg.h>
int main
{
_CrtSetDbgFlag( _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) |
_CRTDBG_LEAK_CHECK_DF );
long lBreakAlloc = 0;
_CrtSetBreakAlloc(lBreakAlloc);
int *pInt = int[1];
return 0;
}
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C++内存泄漏常见
程序中通常包含着静态内存和栈内存。静态内存用来保存局部static对象、类static数
内存泄漏 栈内存 析构函数 -
window下调试C++内存泄漏的几种方法
Windows定位内存泄漏问题
c++ 内存泄漏 vs