【问题标题】:HEAP MEMORY CORRUPTION IN dlmalloc or dlfree and SIGSEGV errors in Android ICS 4.0Android ICS 4.0 中的 dlmalloc 或 dlfree 和 SIGSEGV 错误中的堆内存损坏
【发布时间】:2012-01-15 21:16:57
【问题描述】:

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

dlmalloc 中的堆内存损坏

dlfree 中的堆内存损坏

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是什么导致您尝试删除对 recycle() 的调用?我很好奇,因为我遇到了类似的错误,但我没有调用 Bitmap.recycle()。
    • 我遇到了同样的问题,删除对recycle() 的调用确实完成了这项工作。
    • 我遇到了同样的问题,删除Bitmap.recycle() 修复它。如果没有有用的日志,真的很难找到导致问题的原因。谢谢@MarioB
    【解决方案2】:

    如果您继续针对 ICS 编译您的应用,则无需显式调用回收,因为这会导致信号 11 (SIGSEGV) 错误。

    【讨论】:

    • 嗯,这基本上就是我上面所说的o.O
    • 如果你正在写一个复制别人的回复的回复,请尝试在其中添加一些内容,例如证明确认的文档链接。
    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2010-09-05
    • 2013-08-11
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多