使用Apple LLVM 3.0编译器时,我遇到了一个非常奇怪的崩溃。 所以有一些代码,使用Assimp来加载资源并创建场景(我已经排除了所有代码,甚至崩溃了):
aiScene* ai_scene = const_cast<aiScene*>(aiImportFileFromMemory(fileBuf, fInfo.uncompressed_size, aiProcessPreset_TargetRealtime_MaxQuality, NULL));
delete ai_scene;
以下是GCC堆栈跟踪的屏幕截图:
这是针对LLVM的:
在LLVM版本中,析构函数被调用两次(这可能就是我崩溃的原因)。
我还应该提到所有析构函数代码都位于头文件中,并且仅在设备上崩溃(在iPod 4和iPad 2上测试)。
它是LLVM编译器中的错误(可能是生成arm组件)还是我错过了什么?
编辑:
如果有人遇到类似问题,请使用aiReleaseImport(scene)
代替delete scene;
答案 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上崩溃。