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
相关产品推荐
相关产品推荐

