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

时间:2017-04-12 08:54:19

标签: c winapi

我只想检查一下我是否理解GlobalReAlloc功能的含义。不久,GlobablRealloc会更改大小或内存对象或其属性。我有以下问题:

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

1 个答案:

答案 0 :(得分:4)

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

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