資源建立了用完後必定要釋放

這幾天在嘗試C語言用Win32 API寫個小程序,有個函數是要在指定位置顯示一串數字,爲了圖省事,把  CreateFontIndirect 放在 SelectObject 裏了,代碼是這樣的:  小程序

    SelectObject(hdc,  CreateFontIndirect(&logfont) );
    SetTextColor(hdc, RGB(0,0,0));
    SetBkMode(hdc, TRANSPARENT);
    DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);


開始運行沒問題,但是在這個函數執行了142次後字體變成另一種了。試了N次,很準確的是第142次忽然變了。
琢磨琢磨後想到:是否是字體只建立沒釋放?
修改代碼以下:
函數

   HFONT f = CreateFontIndirect(&logfont);
   SelectObject(hdc, f);
    SetTextColor(hdc, c);
    SetBkMode(hdc, TRANSPARENT);
    DrawText(hdc, s, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    DeleteObject(f);

運行正常。
字體


原來想的是這是個子函數,調用的時候建立字體,函數結束後會自動釋放。
實際上函數結束並無自動釋放,因此在第142次調用後字體資源耗盡了。code

相關文章
相關標籤/搜索