在我的自定義堆棧分配器中,我在程序啓動時使用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記憶。 –