首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >析构函数中的Havok退出调用导致未处理的异常

析构函数中的Havok退出调用导致未处理的异常
EN

Stack Overflow用户
提问于 2011-01-25 03:46:12
回答 2查看 318关注 0票数 3

当我使用havok编程时,当程序退出时我崩溃了,

我将havok函数绑定到C++类中,以简化main函数,并在类的析构函数中调用了havok函数,但这可能会导致“未处理的异常”崩溃。

如果我从析构函数中去掉havok的相当函数,并把它放在main函数中,就没问题了。我只是想知道为什么它在析构函数中不起作用,而在main函数中起作用?

我的代码是:

代码语言:javascript
复制
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++析构函数中发生了什么吗?

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2011-01-25 04:05:15

我对Havok一无所知,但看起来你需要完全按照这个顺序调用两个quit函数:

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

因此,如果您将第二个调用移入HKUTI析构函数,它将首先被调用。要么按照上面的顺序将这两个调用放在析构函数中(您可能希望确保只有一个HKUTI!实例),要么将delete myhk;移到hkBaseSystem::quit();下面。

票数 1
EN

Stack Overflow用户

发布于 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。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4786375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档