2011-11-01 66 views
3

使用Apple LLVM 3.0编译器时出现非常奇怪的崩溃。 因此,有一些代码,使用Assimp装入资产,并创建现场(我已经排除了我的所有代码,甚至然后它崩溃):苹果LLVM 3.0上的应用程序崩溃,但在LLVM GCC 4.2上正常工作4.2

aiScene* ai_scene = const_cast<aiScene*>(aiImportFileFromMemory(fileBuf, fInfo.uncompressed_size, aiProcessPreset_TargetRealtime_MaxQuality, NULL)); 

delete ai_scene; 

下面是GCC堆栈跟踪的截图:

enter image description here

这里是LLVM:

enter image description here

在LLVM版本中,析构函数被调用两次(可能这就是为什么我会崩溃)。

我还应该提到,所有析构函数代码都位于头文件中,并且仅在设备上崩溃(在iPod 4和iPad 2上测试过)。

它是LLVM编译器中的错误(可能是在生成arm组件中)还是我错过了某些东西?

编辑:

万一有人有类似的问题,用aiReleaseImport(scene)代替delete scene;

回答

3

你不应该指向delete指针。阅读文档。它明确指出,你不应该试图以任何方式释放它。

如果调用成功,则该文件的内容作为 指针返回到aiScene对象。返回的数据旨在是只读的 ,导入程序保留数据的所有权并在销毁后销毁数据 。如果导入失败,则返回NULL。可通过调用 aiGetErrorString()来检索可读的错误描述 。

,此外,该文件明确规定,它是只读的,所以做const_castconst路程。

+0

至于const_cast - 这是不推荐的代码,我将尽快删除(场景实际上被视为const)。 – Max

+0

谢谢你指点我正确的方向。你对删除操作符是正确的。 – Max

相关问题