最近在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释放之后再释放。
问题就解决了,内存泄露问题解决了。