我有这段代码
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);
?
答案 0 :(得分:3)
LocalFree的hMem
参数记录为:
本地内存对象的句柄。此句柄由LocalAlloc或LocalReAlloc函数返回。释放用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)
。