应用程序在Apple LLVM 3.0上崩溃,但在LLVM GCC 4.2上运行正常

时间:2011-11-01 14:51:43

标签: iphone c++ gcc llvm

使用Apple LLVM 3.0编译器时,我遇到了一个非常奇怪的崩溃。 所以有一些代码,使用Assimp来加载资源并创建场景(我已经排除了所有代码,甚至崩溃了):

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;

2 个答案:

答案 0 :(得分:3)

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

  

如果调用成功,则文件内容将作为a返回   指向aiScene对象的指针。返回的数据是   只读,导入器保留数据的所有权并将销毁   它在毁灭之后。如果导入失败,则返回NULL。一个   可以通过调用检索人类可读的错误描述   aiGetErrorString()。

此外,文档明确指出它是只读的,因此 const_cast const

答案 1 :(得分:0)

我之前遇到过类似的问题,这种情况非常罕见,因为我没有回答(除了我自己的)问题AppStore build crashes on launch on iPhone 3g and iPod Touch

它仅在iPhone 3g和旧的iPod touch上崩溃。