我在'ABORTING: HEAP MEMORY CORRUPTION'
环境中遇到Android NDK
问题。
如果我使用ndk-gdb
回溯,则主要发生在malloc/dlfree
libc.so
个函数中
在长时间跟踪问题之后,它主要发生在sqlite3_xxx
函数调用中,这在iOS
env。上完全正常工作。
我无法找到深入的地方。
有没有人遇到类似的问题并修好了?
答案 0 :(得分:3)
我看到了内存问题,但没有看到您报告的'ABORTING: HEAP MEMORY CORRUPTION'
。
您必须找出哪个堆已损坏:Java或C / C ++。或者它也许是你的SQL。如果日志没有提供信息,您可以尝试在二进制文件中找到错误消息。
如果它是C / C ++堆,对我有用的是用我自己的版本替换标准的malloc / calloc / free。
#define malloc(x) myMalloc(x, __FILE__,__LINE__,__func__)
等等; myMalloc()和朋友打印调试信息,以便您可以找到分配和释放内存的位置。我有源库,可以编译它。然后记录,记录,记录......
#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()调为已分配的内存 - 以防万一。另一个技巧是分配一个更大的夹头并在其末尾加上一个保护值。如果该值被破坏 - 你会看到。
如果是Java堆,则必须记录本机函数调用(我自己从未在Java堆中看到过问题,通常Java会抱怨其特定于JNI的东西)。
< / LI> 醇>答案 1 :(得分:3)
对于我的程序,当出现线程安全问题时,会显示“ABORTING:HEAP MEMORY CORRUPTION”。特别是使用Cocos2d-x框架时,getFileData()
的{{1}}函数可能会在Android上同时加载ZipUtils
地图集和.plist
时崩溃。虽然代码在iOS上运行良好。