VC 内存检测 转http://blog.163.com/feiqiu_20/blog/static/168971908200711955027604/
2013-09-23 15:51
204 查看
[VC]内存泄露检测
2007-12-09 17:50:27| 分类: 技术文章|字号 订阅VC++ IDE 的默认状态(VC6)是没有启用内存泄漏检测机制的,也就是说即使某段代码有内存泄漏,调试会话的 Output 窗口的 Debug 页不会输出有关内存泄漏信息。你必须设定以启用内存泄漏检测机制。
按下面的方法使用调试堆函数,你再看看输出结果,是不是有很多的内存泄漏?
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>
CXXXView::~CXXXView()
{
_CrtDumpMemoryLeaks();
}
首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。
我们来看看:
F: CodeSample Test TestPipe LeakTest MainFrm.cpp(54) : {86} normal block at 0x00422E80, 10 bytes long.
Data: < > 1F 1F 1F 1F 1F CD CD CD CD CD
F: CodeSample Test TestPipe LeakTest MainFrm.cpp(54) 告诉我们MFC认为是在该文件的54行,发生了内存泄漏。你双击改行就可以转到该文件的54行了。但是有时候这一信息并不能用来准确判断,比如:MFC可能报告Strcore.cpp文件的某行,实际上这是CString的实现函数,此时并不知道什么时候发生了内存泄漏。
此时我们需要更多的信息。那么我们看看紧接其后的:
{86} normal block at 0x00422E80, 10 bytes long.
Data: < > 1F 1F 1F 1F 1F CD CD CD CD CD
它告诉我们:在第86次分配的内存没有释放,一共有10字节,内容移16进制方式打印给我们看。
有了这些信息,我们可以开始调试内存泄漏了。按下F10在程序的刚开始处,停下来,打开Watch窗口:
在Watch窗口中输入:
{,,msvcrtd.dll}_crtBreakAlloc
然后更改值为上文提到的分配次数:86
接着按下F5继续,然后在第86次分配的时候会发生中断
然后我们打开堆栈窗口:
往回查看最近我们自己的代码,双击堆栈我们自己的函数那一层,上图有绿色三角的那一层。就定位到泄漏时分配的内存了。
之后,就是看你的编码功底了。
相关文章推荐
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
- xml解析及编译汇总 valgrind检测内存泄露 http://blog.csdn.net/lifan5/article/details/8030285
- 工欲善其事,必先利其器——VC2005的常用快捷键(来自http://www.cppblog.com/corelito/archive/2008/10/17/64233.html)
- http://blog.163.com/ecy_fu/blog/static/4445126200921512556887/
- VC中利用动态链接库工程生成dll和lib文件http://blog.csdn.net/li_canhui/article/details/6775918
- http://blog.sina.com.cn/s/blog_77dd2fd20100y9vc.html
- VC使用CRT调试功能来检测内存泄漏
- http://wallage.blog.163.com/blog/#m=0&t=1&c=fks_087069093082080070084081082095085081082075093080084071
- VC程序调试技术,一些工具上和具体的问题,包括内存检测
- vector::clear()和vecotr::pop_back()对内存处理的不同 http://blog.csdn.net/vieri_ch/article/details/1191390
- http://blog.163.com/023_dns/blog/static/1187273662012125112426472/
- 诸多打印(来源http://blog.163.com/to_yht/blog/static/12272577420097413530996/)
- 介绍一个VC++下内存泄露检测工具
- 怎样在VC++中访问和修改注册表(转载http://blog.csdn.net/amh/)
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏(转载)
- 整合动网用户登陆 http://www.hotrich.com/blog/article.asp?id=20
- vc++网络安全编程范例(20)木马防范检测数据端口与进程
- cocos2d-x在Android平台上嵌入WebView 转自http://chinaxiangf.blog.163.com/blog/static/79714331201331811113019
- VC使用CRT调试功能来检测内存泄漏
- VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏