Havok在析构函数中退出调用,导致Unhandled异常

时间:2011-01-24 19:46:12

标签: c++ havok

当我使用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 ++析构函数中发生了什么?

非常感谢

2 个答案:

答案 0 :(得分:1)

我对Havok一无所知,但似乎你需要按照这个顺序调用两个退出函数:

  1. hkBaseSystem::quit();
  2. hkMemoryInitUtil::quit();
  3. 因此,如果您将第二个调用移到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。

希望有所帮助。