You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WIN32 API:GlobalLock失败时需释放未锁定内存块吗?

GlobalLock调用失败后的内存释放问题解答

相关代码片段

const HGLOBAL hGlobal = GlobalAlloc(GHND | GMEM_SHARE, sizeInBytes);
if(!hGlobal)
{
    error_set_last(ERR_MEMALLOC);
    CLOSE_CLIPBOARD
    return ERR_MEMALLOC;
}
LPVOID memoryBlock = GlobalLock(hGlobal);
if(!memoryBlock)
{
    GlobalFree(hGlobal);
}

问题解答

  • 当GlobalLock函数调用失败时,是否需要在此处释放hGlobal?
    需要释放。GlobalAlloc成功执行后,系统已经完成了内存分配,这个资源不会因为GlobalLock失败自动回收。如果不调用GlobalFree释放,会直接造成内存泄漏,所以代码里的处理逻辑是正确的。

  • 未锁定的内存块能否被释放?
    可以释放。GlobalFree的核心作用就是回收GlobalAlloc分配的内存块,不管该内存块处于锁定还是未锁定状态。哪怕从未调用过GlobalLock,直接调用GlobalFree也能正确回收对应的内存资源。

内容的提问来源于stack exchange,提问作者kaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:24:51