【问题标题】:Crash with malloc and free in android native codeandroid 本机代码中的 malloc 和 free 崩溃
【发布时间】:2012-01-07 23:48:38
【问题描述】:

我的原生 Android 代码面临崩溃问题。
我的应用类似于scenario (Click here) 中描述的应用。

Java 层会通过调用一些原生 API 来调用原生层并启动一些流程。
在本机中启动线程进行处理时,本机调用立即返回。
一旦处理完成,本机线程将调用java函数(回调函数)通知结果。这是通过使用 JNI 函数和使用 *jvm->AttachCurrentThread() 来完成的。

我从 log cat 中的堆栈跟踪转储中观察到的是,它甚至没有完成处理,它总是在 malloc 或 free 时崩溃(在一些 malloc 或一些 free 之后并且不一致)。

有没有办法在android的本机代码中找到内存损坏?

正如上面链接中提到的,我尝试通过添加来使用此解决方案

LOCAL_EXPORT_LDLIBS += -lc

android.mk 文件中的标志。但这没有帮助,我仍然能够观察到崩溃。

如果有人知道相同的解决方案,请告诉我。

P.S:我用于本机处理的代码已针对其他产品(不在 android 上)进行了全面测试。尝试移植到 android 时遇到问题。

感谢和问候,
SSuman185

【问题讨论】:

  • 你能给出最小的可行样本吗?
  • 我尝试过但无法创建可行的示例。

标签: android memory-management android-ndk malloc free


【解决方案1】:

我发现了问题,实际上 memset() 是在释放内存后完成的。令人惊讶的是,这段代码已经发布并且在其他平台上运行良好。但它会导致 Android 崩溃。

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 2015-05-28
    • 1970-01-01
    • 2011-08-13
    • 2018-08-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多