当我使用havok编程时,当程序退出时我崩溃了,
我将havok函数绑定到C++类中,以简化main函数,并在类的析构函数中调用了havok函数,但这可能会导致“未处理的异常”崩溃。
如果我从析构函数中去掉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;
}第二个退出函数是hkBaseSystem:: quit ();和hkMemoryInitUtil:: quit ();如果我像上面的代码一样在main函数中调用它,程序将完美运行,但是如果我将第二个quit函数放在HKUTI类的析构函数中,当程序试图退出时,它将崩溃。我看不出这两种方法有什么不同,有人能告诉我C++析构函数中发生了什么吗?
非常感谢
发布于 2011-01-25 04:05:15
我对Havok一无所知,但看起来你需要完全按照这个顺序调用两个quit函数:
hkBaseSystem::quit();hkMemoryInitUtil::quit();因此,如果您将第二个调用移入HKUTI析构函数,它将首先被调用。要么按照上面的顺序将这两个调用放在析构函数中(您可能希望确保只有一个HKUTI!实例),要么将delete myhk;移到hkBaseSystem::quit();下面。
发布于 2011-01-25 17:32:13
首先,Havok forums at Intel's site是解决Havok特有问题的好地方。我们的开发人员支持团队会定期在那里回复。
崩溃的callstack是什么?我的猜测是,在调用hkBaseSystem::quit()之后,HKUTI的析构函数正在清理一些Havok对象。所有的Havok类都覆盖了new/delete操作符,使内存分配通过hkMemorySystem的一个实例进行。因此,如果在hkBaseSystem::quit()之后删除Havok对象,将会发生崩溃,因为hkMemorySystem::getInstance()将返回NULL。
希望这能有所帮助。
https://stackoverflow.com/questions/4786375
复制相似问题