在Android ICS 4.0中dlmalloc或dlfree中的HEAP MEMORY CORRUPTION和SIGSEGV错误

时间:2011-12-08 12:23:18

标签: android bitmap heap android-4.0-ice-cream-sandwich

由于在我考虑将问题和解决方案发布到此处之前我找不到任何报告此行为的人,因此它可以帮助其他有此问题的人。我们的应用程序在ICS之前的设备上运行良好。我们在Galaxy Nexus和ICS仿真器上测试了我们的应用程序,并看到了以下类型的奇怪进程崩溃:

dlmalloc中的堆内存损坏

dlfree中的记忆破坏

信号11(SIGSEGV),故障地址deadbaad

问题是崩溃发生在原生空间中,因此没有任何自编代码直接影响它。由于我们在列表中处理了大量图像,并且系统为这些图像分配了位图,因此唯一想到的是一些不好的位图处理。我们遵循网络上的所有最佳实践,我们甚至通过致电bitmap.recycle()帮助GC收集不需要的资源。无论如何,由于某种未知的原因,应用程序在Android ICS 4.0上不断崩溃。

2 个答案:

答案 0 :(得分:23)

经过一番调查后,我删除了对recycle()的电话,现在一切都很顺利。似乎ICS中的垃圾收集器已经正确清除了位图。我们对recycle()的调用导致系统尝试释放本机空间中的内存,但内存已被系统清除。不知何故发生了错误的内存访问,系统崩溃了。因此,如果您正在为Android ICS 4.0进行编程并遇到这些问题,那么您可能需要尝试不显式回收您的位图。

答案 1 :(得分:0)

如果您针对ICS向前编译您的应用程序,则无需显式调用recycle,因为这将导致信号11(SIGSEGV)错误。