2011-01-24 31 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

相关问题