轻松解决内存泄露(不依赖MFC)
来源:百度文库 编辑:神马文学网 时间:2024/04/26 15:31:33
首先,我们要清楚,VC编译器可以将跟踪内存分配情况的代码嵌入到目标程序的能力,这些代码的头文件就是crtdbg.h。当你使用MFC时,将它include之后,只需在程序刚开始执行的地方调用_CrtDumpMemoryLeaks(),调试一次程序,内存泄露的情况就会输出到“输出”窗口,详情见http://blog.csdn.net/HeavenMonkey/archive/2008/05/24/2476411.aspx。 如果你的程序没有使用MFC,也不想使用它,那么_CrtDumpMemoryLeaks()也可以用,但是“输出”窗口中的内存泄露条目是不支持双击定位的,也就是说,你只知道泄露了,但不能是哪一行代码引起的,这样达不到调试目标。 其实,crtdbg.h是不依赖于MFC的,只是对MFC支持很好。在这种情况下,可以采用以下方法定位泄露内存语句:1)程序开始处,加入: int nFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
nFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(nFlag); 以上三行使嵌入的调试线程开启内存分配跟踪,与调用_CrtDumpMemoryLeaks()相似,内存泄露的情况会被输出到“输出”窗口。仔细观察内存泄露的情况,会发现每个内存泄露前面,都有一个{n},n是一个整数,可以看成该信息的id,其实是说程序的第几次内存分配没有回收。2)在以上三行后面,加入:_CrtSetBreakAlloc(n); 其中n就是某一个内存泄露的id,调试一下,你会发现,程序停止在某一行,这就是对应该id分配的地方。然后就看你的了,解决它吧!
nFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(nFlag); 以上三行使嵌入的调试线程开启内存分配跟踪,与调用_CrtDumpMemoryLeaks()相似,内存泄露的情况会被输出到“输出”窗口。仔细观察内存泄露的情况,会发现每个内存泄露前面,都有一个{n},n是一个整数,可以看成该信息的id,其实是说程序的第几次内存分配没有回收。2)在以上三行后面,加入:_CrtSetBreakAlloc(n); 其中n就是某一个内存泄露的id,调试一下,你会发现,程序停止在某一行,这就是对应该id分配的地方。然后就看你的了,解决它吧!
轻松解决内存泄露(不依赖MFC)
java内存泄露
内存泄露与溢出区别
VC++内存泄漏定位(依赖MFC)
MFC双缓冲解决图象闪烁
MFC
常见内存泄露及解决方案-选自ood启示录
探查内存不足(内存泄露)问题 - zhaonjtu - JavaEye技术网站
内存常见故障解决实例 - 电脑维修网
解决手机内存卡无法格式化
轻松解决盘符打不开的病毒
女人乳房不适轻松解决
轻松解决u盘难拔问题
轻松解决电脑没有声音
解决内存不能为read,write+手动解决内存不能为read最加方案
解决内存不能为read,write+手动解决内存不能为read最佳方案
tomcat连接池泄露的监控和解决
tomcat连接池泄露的监控和解决
一些类库和框架内存泄露而导致down机的隐患
内存泄漏的检测、定位和解决经验总结
XP系统故障:内存不能为read怎么解决?
略施小计!解决手机内存卡无法格式化
针对诺基亚N97c盘空间不足内存释放解决技巧
解决内存不足的9大原则及方法。内存