如何处理vc程序中的内存泄漏问题?请高手们给点意见 这几天内存泄漏问题搞得我很是郁闷,找半天找不到在哪里漏了,大家有什么方法或者工具去查找和处理内存泄漏问题呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最简单的运行Debug版本,最后会报告在什么地方泄露了,仔细看看。 先要养成良好的编程习惯 new的就一定要delete 装一个BoundersCheck程序,当你调试的时候,它会告诉你哪里发生了内存泄漏和资源泄漏。 在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。 如果是不大的工程,建议使用BoundsChecker;如果工程很大,而你只修改了其中的小模块就产生Memory Leak,那么我建议你自己查,因为BoundsChecker启动的时候会比较慢,大项目的话更是如此。Memory Leak其实一般都是指针忘记Delete了,仔细查查看了:) vcdebug的报告就像这个样子:Detected memory leaks!Dumping objects ->{412} normal block at 0x00A43C00, 36 bytes long. Data: <pL ? pL > 70 4C A4 00 80 3F A4 00 70 4C A4 00 00 CD CD CD {411} normal block at 0x00A43C50, 24 bytes long. Data: <P< D P< > 50 3C A4 00 E0 44 A4 00 50 3C A4 00 CD CD CD CD 我还是看不出来在哪里漏了!郁闷!不会是cstring的问题吧,我用完cstring都没有清空.我new 的内存都会在最后的析构函数中释放呀 在你的每个cpp文件里都加上#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif如果你的内存全部是用new 分配的话,如果你忘了调delete,他会在Debug输出内存泄露时标明你调用new地方。 BoundsChecker 功能强大,使用又很方便,我一直用它! 在win7下怎么实现一个放大镜功能 请问xtreme toolkit收费吗?怎么用? 几个新手问题 串口异步通信中能接收数据,但不能发送数据 哪有论坛助手 请问如何在VC中调用VB编写的ActiveX.exe,急~~~高分 window 7 下如何编程设置环境变量? com中如何传递自定义类型的结构数组? VS2008下的问题 请问MFC+VS2017怎么做出来这样的图片浏览功能 如何判断点是否在线上 谁知道怎样显示一张GIF图啊,用什么类呢?在线等 ̄ ̄ ̄ 谢
最简单的运行Debug版本,最后会报告在什么地方泄露了,仔细看看。
如果工程很大,而你只修改了其中的小模块就产生Memory Leak,那么我建议你自己查,因为BoundsChecker启动的时候会比较慢,大项目的话更是如此。
Memory Leak其实一般都是指针忘记Delete了,仔细查查看了:)
Detected memory leaks!
Dumping objects ->
{412} normal block at 0x00A43C00, 36 bytes long.
Data: <pL ? pL > 70 4C A4 00 80 3F A4 00 70 4C A4 00 00 CD CD CD
{411} normal block at 0x00A43C50, 24 bytes long.
Data: <P< D P< > 50 3C A4 00 E0 44 A4 00 50 3C A4 00 CD CD CD CD
我还是看不出来在哪里漏了!郁闷!不会是cstring的问题吧,我用完cstring都没有清空.
我new 的内存都会在最后的析构函数中释放呀
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif如果你的内存全部是用new 分配的话,如果你忘了调delete,他会在Debug输出内存泄露时标明你调用new地方。