diff --git a/source/lib/allocators/headerless.cpp b/source/lib/allocators/headerless.cpp index f29a1e6d3d..b30e564139 100644 --- a/source/lib/allocators/headerless.cpp +++ b/source/lib/allocators/headerless.cpp @@ -54,12 +54,14 @@ public: { } - FreedBlock(uintptr_t id, size_t size) - : m_magic(s_magic), m_size(size), m_id(id) + void Setup(uintptr_t id, size_t size) { + m_magic = s_magic; + m_size = size; + m_id = id; } - ~FreedBlock() + void Reset() { // clear all fields to prevent accidental reuse prev = next = 0; @@ -410,8 +412,9 @@ public: FreedBlock* WriteTags(u8* p, size_t size) { - FreedBlock* freedBlock = new(p) FreedBlock(s_headerId, size); - (void)new(Footer(freedBlock)) FreedBlock(s_footerId, size); + FreedBlock* freedBlock = (FreedBlock*)p; + freedBlock->Setup(s_headerId, size); + Footer(freedBlock)->Setup(s_footerId, size); m_freeBlocks++; m_freeBytes += size; @@ -430,8 +433,8 @@ public: m_freeBytes -= freedBlock->Size(); FreedBlock* footer = Footer(freedBlock); - freedBlock->~FreedBlock(); - footer->~FreedBlock(); + freedBlock->Reset(); + footer->Reset(); } FreedBlock* PrecedingBlock(u8* p, u8* beginningOfPool) const