我一直在努力修复游戏中的最终错误。游戏使用了Irrlicht的Android端口和Bullet物理。
在OS X和Windows上尝试了相同的代码,没有任何问题。但是,当我们将代码移植到Android NDK时,现在会发生随机崩溃。大多数崩溃都在libc.so
,这可能是一种无效的异常。我们不在代码中使用scenenode->remove()
,而是smgr->addToDeletionQueue
。
崩溃是随机的,它发生在以下陈述中。
libc.so
smgr->drawall()
stepsimulation
。当我们卸载一个级别并加载下一级别或重新加载一个级别时,会出现90%的错误。我们首先怀疑编译器并使用了stlport。应该提升图书馆的帮助吗?
我确信,我提供的信息很难猜到这个问题。但由于相同的游戏代码在其他平台上运行良好,我只想清除我对编译器相关差异的疑虑。
Android ndk中的简单malloc
然后delete
在删除时崩溃。所以我想更好地理解我们正在努力修复的是与编译器相关的愚蠢问题。
答案 0 :(得分:0)
在摆弄这个问题几个星期之后,我终于找到了问题的根源。
我初次化了一个像这样的char数组
char data = new char[10];
然后考虑用'\ 0'
像往常一样填充最后一个字符data[10] = '\0';
抛出一个nullpointer异常。
当我在Windows中运行相同的代码时,我能够指出这个问题。即使在Windows上,当连接调试器运行时,问题也没有显示出来。然而,当我通过直接打开exe运行应用程序时,它崩溃了。所以我不得不使用程序“Application Verifier”来指出问题。