资源创建了用完后一定要释放
博客专区 > 四彩 的博客 > 博客详情
资源创建了用完后一定要释放
四彩 发表于6年前
资源创建了用完后一定要释放
  • 发表于 6年前
  • 阅读 231
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 25
博文 49
码字总数 77226
×
四彩
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: