windows – 如果我调用GlobalLock(),然后无法调用GlobalUnlock()会发生什么?

前端之家收集整理的这篇文章主要介绍了windows – 如果我调用GlobalLock(),然后无法调用GlobalUnlock()会发生什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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应用程序时,将自动释放所有已分配的专用内存

原文链接:https://www.f2er.com/windows/372214.html

猜你在找的Windows相关文章