加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如果我调用GlobalLock(),然后无法调用GlobalUnlock()

发布时间:2020-12-13 20:46:41 所属栏目:Windows 来源:网络整理
导读:在Win32中为了将数据粘贴到剪贴板中我必须调用GlobalAlloc(),然后 GlobalLock() 获取指针,然后复制数据,然后调用GlobalUnlock()和SetClipboardData(). 如果代码在C中,则可能在对GlobalLock()和GlobalUnlock()的调用之间抛出异常,如果我不处理,则不会调用此Gl
在Win32中为了将数据粘贴到剪贴板中我必须调用GlobalAlloc(),然后 GlobalLock()获取指针,然后复制数据,然后调用GlobalUnlock()和SetClipboardData().

如果代码在C中,则可能在对GlobalLock()和GlobalUnlock()的调用之间抛出异常,如果我不处理,则不会调用此GlobalUnlock().

这是一个问题吗?如果我调用GlobalLock()并出于什么原因跳过配对的GlobalUnlock()调用会发生什么?

问题不仅仅是关于你是否调用GlobalUnlock().您必须调用GlobalUnlock()和GlobalFree().必须调用两者才能释放您分配的内存:
HGLOBAL hdl = NULL;
void *ptr = NULL

  try {
    hdl = GlobalAlloc();
    ptr = GlobalLock(hdl);

    // etc...
    GlobalUnlock(hdl);
    ptr = NULL;
    SetClipboardData(...,hdl );
  }
  catch (...) {
    if(ptr)
        GlobalUnlock(hdl);
    if(hdl)
        GlobalFree(hdl);
    throw;
  }

泄漏将适用于整个应用范围.退出Windows应用程序时,将自动释放所有已分配的专用内存

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读