wince EVC 绘图内存泄露

 http://www.cnblogs.com/harlentan/archive/2010/03/20/2006505.html

最近在wince  用MFC作绘图的程序。

CDC *pCD = GetDC();

CDC memDC;

CBitmap memBitmap;

CPen newPen;


....

....//后面是画图代码

//以上定义的这些量都会在我的绘图的for()循环中,反复定义反复使用,其中,memBitmap, newPen,是供memDC在内存中画图使用的。
//正常的思维都是在使用完之后销毁。

newPen.DeleteObject();
memBitmap.DeleteObject();

memDC.DeleteDC();
pDC->ReleaseDC();

//如此释放

/// 

 

那么,这么释放的话,等for循环次数多了,wince就会提示内存不足,出现内存泄露。

那么,上面代码明明白白的写出来了,关于对使用的量进行释放。为什么还是出现内存泄露呢?

google了很久,后来在微软官方找到了解决办法。

http://support.microsoft.com/kb/819635/zh-cn

但是,按照他的办法,我还是出现了内存泄露。程序运行一段时间之后,会出现内存不足,内存泄露的问题。

后来,开始对代码进行调试,经过调试,我发现,

memBitmap.DeleteObject()

newPen.DeleteObject();

这两句运行之后,内存根本就没有释放空间。这说明这两句话没有起到释放的作用。

那么为什么没有起到作用呢?  莫非是因为memBitmap 和newPen还在使用当中?

于是调换了释放顺序如下:

memDC.DeleteDC();
newPen.DeleteObject();
memBitmap.DeleteObject()
pDC->ReleaseDC();


//newPen,memBitmap在memDC释放之后再释放。

/

问题就解决了,内存泄露问题解决了。

 这个问题应该归结为由于内存碎片的问题而产生了内存泄漏

如何才能不产生内存碎片?

 首先分配和释放应当对称,顺序是按栈式分配和释放(即按123顺序分配,321顺序释放),

可以避免内存碎片的产生.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值