gpt4 book ai didi

android - 无法调试 I/DEBUG(187) : signal 11 (SIGSEGV), 代码 1 (SEGV_MAPERR),故障地址 00000004

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:46 28 4
gpt4 key购买 nike

我正在开发一个需要大量内存分配(大量图像缓冲区)的 Android 应用程序。为此,我正在使用 Android NDK。我遇到了奇怪的崩溃。我希望这不是重复的帖子(在浏览了以前的帖子之后)

应用程序崩溃并出现以下错误:I/DEBUG(187):信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR),故障地址 00000004

  1. 我以前遇到过分割错误,已经解决了。

  2. 我非常确定我正在正确分配和取消分配内存,因为我对 Windows 进行了相同的设置,确认没有内存泄漏,并且我没有访问任何未分配的位置。 (没有取消引用,没有坏指针)。在 Windows 上测试时未发现内存损坏。

  3. 我还确保为分配和解除分配进行的 JNI 调用位于代码中的适当位置。内存只有在使用完成后才会被清除。

  4. 每次发生崩溃时,回溯都会显示不同的 API 调用,即错误发生的位置。我获取了日志,没有任何指针为空,它们符合预期。

  5. 此崩溃非常随机发生。偶尔。 一个。当我长时间在应用程序中时。 b。当在应用程序内执行大量操作时。但它在大多数时候都运作良好。

任何人都可以建议我的代码中内存是如何损坏的。可能是什么原因造成的。

最佳答案

检查您可能从结构或数组访问字段的地方。我之所以这样说是因为错误地址是 00000004,它是 NULL 地址后 4 个字节。检查每个字段访问,特别是在执行很多次的代码中。此外,检查 malloc/new 是否返回 NULL,您的设备可能内存不足。

既然你说这个问题发生在执行大量操作或应用程序长时间运行时,我会检查内存泄漏。您的应用可能会占用所有设备内存。如果您有自定义分配器/解除分配器,您可能希望使用全局计数器,对于每次分配增加它,对于每次解除分配,减少它。如果计数器太高,就是内存泄漏。

关于android - 无法调试 I/DEBUG(187) : signal 11 (SIGSEGV), 代码 1 (SEGV_MAPERR),故障地址 00000004,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com