GDI資源洩漏導致的程式異常的解析

xingpacer發表於2012-05-16

        之前聽說過,在編寫程式碼時要注意及時釋放申請來的GDI資源,以免產生GDI資源洩漏,導致程式異常。但是沒有實際的體會,在今天晚上的小組討論會上,大家談到了這類話題,才真實的體會到GDI資源洩漏帶來的種種不利影響,比如會出現LoadBitmap失敗直接導致奔潰,程式繪圖出現異常(主要是視窗自繪出現異常),程式記憶體持高不下等等。    

       那麼GDI資源洩漏具體什麼含義呢?主要是指申請的GDI資源沒有釋放,導致程式佔用的GDI資源越來越多,記憶體的佔用也越來越多,從而導致程式出現異常。在Windows中有HPEN、HBRUSH等GDI物件,MFC對GDI物件進行了很好的封裝,提供了封裝GDI物件的類,如CPen、CBrush、CFont、CBitmap和CPalette等,這些類都是GDI物件類CGdiObject的派生類。對於通過Create-XXXXX動態建立的GDI物件資源一定要進行銷燬,比如CreateCompatibleDC()、CreateCompatibleBitmap()、CreateIndirectFont()、CreateSolidBrush()、CreatePen()等,在使用結束後一定要呼叫對應的Delete-XXXXX介面將GDI物件資源給釋放掉。

相關文章