2011-01-24 63 views
3

當我編程使用Havok,我得到了一個崩潰的程序退出時,Havok的退出在析構函數調用導致未處理的異常

我envlope Havok的功能,以C++類,使主要功能簡單,我打電話havok在我的類的析構函數中退出了函數,但它可能導致「未處理的異常」崩潰。

如果我參加了Havok的靜音功能的析構函數,並把它的主要功能,它會被罰款。我只是想知道爲什麼它不能在析構函數中工作,但在主函數中工作?

我的代碼是:

int HK_CALL main(int argc, const char** argv) 
{ 
    HKUTI *myhk = new HKUTI(setupPhysics, 1000); 
    myhk->run(displayGraphics, 60, 30); 

    delete(myhk); 
    myhk = NULL; 

    hkBaseSystem::quit(); 
    hkMemoryInitUtil::quit(); 
    return 0; 
} 

2的Havok退出功能hkBaseSystem ::退出();和hkMemoryInitUtil :: quit(); 如果我像上面的代碼那樣在主函數中調用它,程序將完美運行,但是如果我將該2退出函數放入類HKUTI的析構函數中,它將在程序試圖退出時崩潰。我不能看到任何兩種方法的不同,任何人都可以告訴我在C++析構函數中發生了什麼?

非常感謝

回答

1

我不知道什麼Havok的,但現在看來,你需要調用兩人正是爲了退出功能:

  1. hkBaseSystem::quit();
  2. hkMemoryInitUtil::quit();

所以,如果你移動第二個呼叫到HKUTI析構函數,它會首先調用。要麼把兩個通話,在與上面的順序在析構函數(您可能希望確保只有的HKUTI一個實例!),或移動delete myhk;下面hkBaseSystem::quit();

0

首先,Havok forums at Intel's site是Havok特定問題的好地方。我們的開發人員支持團隊定期回覆。

什麼是崩潰的調用堆棧?我猜想發生的事情是,在你調用hkBaseSystem :: quit()之後,HKUTI的析構函數正在清理一些Havok對象。所有Havok類都會覆蓋新的/刪除操作符,以使內存分配通過hkMemorySystem的一個實例。因此,如果在hkBaseSystem :: quit()之後刪除Havok對象,則會發生崩潰,因爲hkMemorySystem :: getInstance()將返回NULL。

希望有所幫助。

+0

非常感謝,您的意見是真正有用的。 – 2011-01-25 12:24:26

相關問題