2011-11-01 77 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

相關問題