gpt4 book ai didi

android - 中止 : HEAP MEMORY CORRUPTION on NDK env.(POCO 库、Sqlite3、Cocos2dx)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:40 26 4
gpt4 key购买 nike

我在 Android NDK 环境中遇到 'ABORTING: HEAP MEMORY CORRUPTION' 问题。

如果我使用 ndk-gdb 回溯,它主要发生在 libc.so 中的 malloc/dlfree 函数上经过长时间的跟踪问题,它主要发生在 sqlite3_xxx 函数调用中,这在 iOS env 上绝对可以正常工作。

我只是找不到我必须深入的地方。

有没有人遇到过类似的问题并解决了?

最佳答案

  1. 我看到了内存问题,但没有看到您报告的'ABORTING: HEAP MEMORY CORRUPTION'

  2. 您必须找出哪个堆已损坏:Java 堆还是 C/C++ 堆。或者它可能是你的 sql。如果日志没有提供信息,您可以尝试在二进制文件中找到错误消息。

  3. 如果是 C/C++ 堆,对我有用的是用我自己的版本替换标准的 malloc/calloc/free。

    #define malloc(x) myMalloc(x, __FILE__,__LINE__,__func__)

    等等; myMalloc() 和 friend 打印调试信息,以便您可以找出内存分配和释放的位置。我有库的源代码并且可以编译它。然后记录,记录,记录...

    #include <android/log.h>
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "~~~~~~", __VA_ARGS__)
    #define DLOG(...) __android_log_print(ANDROID_LOG_DEBUG , "~~~~~~", __VA_ARGS__)

    我还让 myMalloc() 将分配的内存归零——以防万一。另一个技巧是分配一个更大的卡盘并在其末尾放置一个保护值。如果该值损坏——你看。

  4. 如果是 Java 堆,您将不得不记录您的 native 函数调用(我自己从未见过 Java 堆中的问题,通常 Java 会提示其 JNI 特定的东西)。

关于android - 中止 : HEAP MEMORY CORRUPTION on NDK env.(POCO 库、Sqlite3、Cocos2dx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15218508/

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