閱讀835 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Wince MFC OLE DB SQLCE數據庫訪問技術(二):嵌入式目標平台創建本地數據庫sdf文件
  下一篇:go asp.net導出excel文件的程序調試沒問題但布置時出現問題