资源创建了用完后一定要释放

这几天在尝试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次调用后字体资源耗尽了。

你可能感兴趣的:(资源创建了用完后一定要释放)