2012-05-16 24 views
0

我一直在努力修復我們遊戲中的一些最終的錯誤。遊戲使用Irrlicht和Bullet物理的Android端口。Android Irrlicht子彈隨機內存管理崩潰

相同的代碼是在OS X和Windows試過沒有任何問題。但是,當我們將代碼移植到Android NDK並且現在發生隨機崩潰時。大多數崩潰在libc.so這可能是有點nullpointerexception。我們在代碼中不使用scenenode->remove(),而使用smgr->addToDeletionQueue

崩潰是如此隨機,以至於它在下面的語句中出現。

  1. libc.so
  2. smgr->drawall()
  3. 子彈stepsimulation

當我們卸載一個級別並加載下一級別或重新加載級別時,發生錯誤的時間爲90%。我們首先懷疑編譯器和使用stlport。應該提高圖書館的幫助

我相信,我所提供的信息是很少想這個問題。但是由於相同的遊戲代碼在其他平臺上運行良好,我只想澄清我對編譯器相關差異的懷疑。

簡單malloc,然後在Android的NDK崩潰delete在刪除。所以我想更好地理解我們正在努力解決的問題是與編譯器有關的一個愚蠢問題。

回答

0

這個問題了幾個星期的擺弄之後,我終於找到了問題的根源。

我initiallized字符數組這樣

char data = new char[10]; 

,然後考慮填充所述最後一個字符照常與 '\ 0'

data[10] = '\0'; 

其拋出一個空指針異常。

我能夠針點這個問題,當我在Windows中運行相同的代碼。即使在Windows上,當使用連接的調試器運行時也不會顯示問題。然而,當我直接打開exe運行應用程序時,它崩潰了。所以我不得不使用程序「Application Verifier」來指出問題。