我如何为ZIP结构分配内存?



我找到了一个ZIP库,我想用WinAPI调用重写它。我几乎已经完成了,但是我不能为TState结构分配内存。

state = new TState();工作正常!

state = (TState*)HeapAlloc(GetProcessHeap(), 0, sizeof(TState));破坏档案!

如果我将HeapAlloc()更改为malloc(),没有任何变化!

那么,我做错了什么?

TState包含一些重要的成员(即:TTreeState tsTDeflateState ds),它们有自己的构造函数,new可以正确调用这些构造函数,但malloc()/HealAlloc()不能调用这些构造函数。因此,您需要使用placement-new在分配的内存中正确构造TState对象,例如:

buffer = HeapAlloc(GetProcessHeap(), 0, sizeof(TState)); // or malloc()
state = new(buffer) TState;
...
state->~TState();
HeapFree(GetProcessHeap(), 0, buffer); // or free()

否则,您将不得不重写TTreeStateTDeflateState,使它们成为平凡的类型(即,删除它们的构造函数)。在分配了每个TState实例之后,您只需要手动初始化它们的数据成员。

相关内容

  • 没有找到相关文章

最新更新