我如何调用LocalFree()?

时间:2015-06-11 17:39:46

标签: c winapi

我有这段代码

HLOCAL localHandle;
char *lpText;
localHandle = LocalAlloc(LMEM_MOVEABLE, 40);
if(localHandle)
{
    lpText = (char*)LocalLock(localHandle);
    //Call LocalFree(localHandle) or LocalFree(lpText) ????
}

我应该致电LocalFree(localHandle);还是LocalFree(lpText);

3 个答案:

答案 0 :(得分:3)

LocalFreehMem参数记录为:

  

本地内存对象的句柄。此句柄由LocalAllocLocalReAlloc函数返回。释放用GlobalAlloc分配的内存是不安全的。

因此,在您的示例中,您需要致电:

LocalFree(localHandle);

在调用LocalUnlock之前不要忘记调用LocalFree,以减少引用计数。使用LMEM_MOVEABLE时必须这样做。

答案 1 :(得分:1)

这两者都没有,但从来没有LocalFree(lpText)从代码的外观来看,lpText指向的内存在调用LocalFree后会变成垃圾。

如果你调用LocalLock,那么你应该在调用LocalFree(localHandle)之前调用LocalUnlock(localHandle)。

为什么不使用malloc?是否有一些技术原因需要只调用LocalAlloc?让运行时为您完成工作。

答案 2 :(得分:1)

这些函数似乎是某些库的一部分。我不知道库,但通常(参见malloc()和free()),你必须在malloc()函数返回的指针/对象上调用free() - 函数。

所以在你的情况下,LocalFree(localHandle)