读书人

帮忙找一下内存泄漏在哪儿

发布时间: 2013-08-16 14:29:57 作者: rapoo

帮忙找一下内存泄漏在哪里
程序是用Win32 API写的。
这只是核心代码,其中Render会被不断循环调用,这个只是一个我用来测试的程序,原程序比这复杂得多,但是出问题的与这部分代码功能一样,只是所加载的图片不是固定的,而是一直在变。
程序一跑起来就可以看到内存开始缓慢增长,因为只有一张图的资源在泄漏,涨的不是很快,但是我可以肯定的是如果放着不管,几个小时后我电脑内存就会爆掉,我怀疑是CImage造成的内存泄漏,在网上搜了好多这方面的信息,都不能解决我的问题,不要说用ReleaseGDIPlus,这个函数一样不行,已经试过了。



自己的写的代码,最清除那里进行的内存分配,那里进行堆空间的申请阿!

而且更加清楚那里去作响应的释放空间的!
[解决办法]
建议将循环调用的函数中的dc等相关资源在外部申请和释放,避免在循环中频繁申请释放
------解决方案--------------------



还是说我理解错你的意思了,那你再说详细点?

引用:
试试智能指针

//IStream* pstm;
CComPtr<IStream> pstm;

表示不行,我试了,还是内存泄漏,不是Release的问题。
你该使用内存泄露检测工具了:vld很简单易用。
[解决办法]
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象


让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

读书人网 >C++

热点推荐