GlobalRealloc 之后我应该释放全局内存吗?

LmT*_*oon 1 c winapi

我只是想检查我是否GlobalReAlloc正确理解了函数的含义。很快,GlobablRealloc更改大小或内存对象或其属性。我有以下问题:

 HGlobal old_mem = GlobalAlloc(...);
 HGlobal new_mem = GlobalReAlloc(12345, old_mem, 0); // Should I free old_mem?
Run Code Online (Sandbox Code Playgroud)
  1. 重新分配后是否应该释放旧内存对象?据我了解,函数只是更改内存对象本身并返回更新的内存对象。如果我错了,请纠正我
  2. 如果重新分配失败,我应该释放旧的内存对象吗?

Mar*_*gal 5

  1. 不,如果函数成功,旧内存现在无效,内容被复制到新分配的区域,从现在开始您应该使用新指针。所以如果函数成功,不要释放旧内存

  2. 如果该功能失败,则不会进行任何更改。这意味着旧指针仍然有效,您可以使用它。现在,如果您想释放旧指针,也可以。一般来说,现在程序的状态与调用之前相同GlobalReAlloc