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;
}

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C/C++内存泄漏及检测
该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可
内存泄漏 内存分配 #include -
C++内存泄漏常见
程序中通常包含着静态内存和栈内存。静态内存用来保存局部static对象、类static数
内存泄漏 栈内存 析构函数 -
C++内存泄漏
对于内存泄露,这是一个很重要的问题,我们分析了几个例子,来更全面的定义内存泄露。 例如如果我们分配了内存(n
智能指针 作用域 #include 内存泄露 引用计数