Iphone 应用程序在Apple LLVM 3.0上崩溃,但在LLVM GCC 4.2上正常工作
我在使用Apple LLVM 3.0编译器时遇到了一个非常奇怪的崩溃。 因此,有一些代码用于加载资源和创建场景(我已经排除了所有代码,甚至在崩溃时):Iphone 应用程序在Apple LLVM 3.0上崩溃,但在LLVM GCC 4.2上正常工作,iphone,c++,gcc,llvm,Iphone,C++,Gcc,Llvm,我在使用Apple LLVM 3.0编译器时遇到了一个非常奇怪的崩溃。 因此,有一些代码用于加载资源和创建场景(我已经排除了所有代码,甚至在崩溃时): aiScene*ai_scene=const_cast(aiimportfilefrommmemory(fileBuf,fInfo.uncompressed_size,aiProcessPreset_TargetRealtime_MaxQuality,NULL)); 删除爱慕场景; 以下是GCC堆栈跟踪的屏幕截图: 以下是针对LLVM的:
aiScene*ai_scene=const_cast(aiimportfilefrommmemory(fileBuf,fInfo.uncompressed_size,aiProcessPreset_TargetRealtime_MaxQuality,NULL));
删除爱慕场景;
以下是GCC堆栈跟踪的屏幕截图:
以下是针对LLVM的:
在LLVM版本中,析构函数被调用了两次(这可能就是我崩溃的原因)
我还应该提到,所有析构函数代码都位于头文件中,并且只在设备上崩溃(在iPod4和iPad2上测试)
这是LLVM编译器中的一个bug(可能是在生成arm程序集时),还是我遗漏了什么
编辑:
如果有人有类似问题,请使用
aiReleaseImport(场景)
而不是删除场景代码>我之前也遇到过类似的问题,这是非常罕见的,因为我对这个问题没有任何反应(除了我自己的)
它只会在iPhone 3g和旧的iPodtouch上崩溃。你根本不应该删除那个指针。阅读文档。它清楚地表明,你不应该试图以任何方式释放它
如果调用成功,文件的内容将作为
指向aiScene对象的指针。返回的数据旨在
只读,导入程序保留数据的所有权,并将销毁数据
它一经毁灭就消失了。如果导入失败,则返回NULL。A.
可以通过调用
aiGetErrorString()
此外,文档明确声明它是只读的,因此不要将const\u cast
常量
删除。至于const\u cast-这是不推荐使用的代码,我将很快删除它(场景实际上被视为const)。感谢您为我指明了正确的方向。关于删除运算符,您是对的。
aiScene* ai_scene = const_cast<aiScene*>(aiImportFileFromMemory(fileBuf, fInfo.uncompressed_size, aiProcessPreset_TargetRealtime_MaxQuality, NULL));
delete ai_scene;