当我使用havok进行编程时,程序退出时出现了崩溃,
我已经将havok函数包含在C ++类中以使main函数变得简单,并且我在类的析构函数中调用了havok quit函数,但它可能导致“Unhandled exception”崩溃。
如果我从析构函数中取出havok的相当函数,并将其放在main函数中,那就没问题了。我只是想知道为什么它在析构函数中不起作用但在main函数中工作?
我的代码是:
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 :: quit();和hkMemoryInitUtil :: quit(); 如果我像上面的代码一样在main函数中调用它,程序将运行完美,但是如果我在HKUTI类的析构函数中放入2退出函数,当程序试图退出时它将崩溃。我看不出那种方法有什么不同,有谁能告诉我C ++析构函数中发生了什么?
非常感谢
答案 0 :(得分:1)
我对Havok一无所知,但似乎你需要按照这个顺序调用两个退出函数:
hkBaseSystem::quit();
hkMemoryInitUtil::quit();
因此,如果您将第二个调用移到HKUTI
析构函数中,它将首先被调用。在析构函数中按上述顺序放置两个调用(您可能希望确保只有HKUTI
的单个实例!),或者将delete myhk;
移到hkBaseSystem::quit();
下方。
答案 1 :(得分:0)
首先,Havok forums at Intel's site是Havok特定问题的好地方。我们的开发人员支持团队定期回复。
崩溃的问题是什么?我猜测发生了什么事情是HKUTI的析构函数在你调用hkBaseSystem :: quit()之后清理了一些Havok对象。所有Havok类都覆盖new / delete运算符,以使内存分配通过hkMemorySystem的实例。因此,如果在hkBaseSystem :: quit()之后删除Havok对象,则会发生崩溃,因为hkMemorySystem :: getInstance()将返回NULL。
希望有所帮助。