在我的自定义堆栈分配器中,我在程序启动时使用malloc()
分配了大量内存,然后在程序关闭I free()
处分配了所有内存。在自定义堆栈分配器中释放内存
所以基本上它看起来像这样:
//start up
m_pInitialPosition = malloc(STACK_SIZE);
//shutdown
free(m_pInitilaPosition);
当我需要创建一个新的对象我打电话allocateNew()
:
Actor* pActor = getStackAllocator().allocateNew<Actor>();
*pActor = Actor();
这是allocateNew()
样子:
template <class T>
T* allocateNew()
{
//allocate returns void*
return new (allocate(sizeof(T), __alignof(T))) T;
}
发生问题(_BLOCK_TYPE_IS_VALID(pHead-> nBlock使用异常)如果我叫:
delete pActor;
如果我只是删除了这一行的问题就不存在了,也没有内存泄漏,因为我还是叫free()
在堆栈中分配,但演员的析构函数不叫...
那么,我可以改变以确保析构函数被调用?
'allocateNew'的取消分配补码是什么样的?那将是你需要调用析构函数的地方。 –
来自第一个'malloc'调用的内存在哪里被使用?看起来你只是为'pActor'分配新的内存。 'malloc'ed内存在哪里被使用?为什么你首先使用'malloc'?你应该使用'new'和'delete'。 'malloc'不知道对象或析构函数。 – Linuxios
@ Linux_iOS.rb.cpp.c.lisp.m.sh allocate()方法返回一个指向使用malloc()分配的内存的指针,所以allocateNew()方法内的new()并不真正分配new记忆。 –