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应用程序时,将自动释放所有已分配的专用内存 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |