wince EVC 繪圖內存泄露
最近在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了很久,後來在微軟官方找到了解決辦法。
https://support.microsoft.com/kb/819635/zh-cn
但是,按照他的辦法,我還是出現了內存泄露。程序運行一段時間之後,會出現內存不足,內存泄露的問題。
後來,開始對代碼進行調試,經過調試,我發現,
memBitmap.DeleteObject()
newPen.DeleteObject();
這兩句運行之後,內存根本就沒有釋放空間。這說明這兩句話沒有起到釋放的作用。
那麼為什麼沒有起到作用呢? 莫非是因為memBitmap 和newPen還在使用當中?
於是調換了釋放順序如下:
memDC.DeleteDC(); newPen.DeleteObject(); memBitmap.DeleteObject() pDC->ReleaseDC(); //newPen,memBitmap在memDC釋放之後再釋放。
問題就解決了,內存泄露問題解決了。
最後更新:2017-04-02 04:26:01