有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中止:DALVIK:dispose\u chunk addr=0x0中的堆内存损坏

我实际上面临着一个我无法解决的问题。 我的应用程序启动大约10秒后,堆内存出现损坏

我正在与JNI合作,我认为问题可能来自这里:

JNIEXPORT void JNICALL Java_net_coop_rouler_motion_MotionActivityEngineProxy_getMotionData(JNIEnv *env, jobject thiz, jbyteArray bufferOut, jobject annotations)
{
    jbyte *cBufferOut = env->GetByteArrayElements(bufferOut, 0);

    MotionActivityEngine *mae = getMotionActivityEngine(env, thiz);
    bool boolMotionData[16];
    mae->getMotionData(boolMotionData);
    for (int i = 0; i < 16; ++i) {
        cBufferOut[i] = boolMotionData[i] ? 1 : 0;
    }

    jclass clazz = env->GetObjectClass (annotations);
    jmethodID mid = env->GetMethodID (clazz, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
    if (mid == 0)
        return;
    std::string a;
    mae->getAnnotations(a, 9);
    jstring _jstring = env->NewStringUTF (a.c_str());
    env->CallObjectMethod (annotations, mid, _jstring);

    env->ReleaseByteArrayElements(bufferOut, cBufferOut, JNI_ABORT);
}

有什么不对劲吗?也许我应该放开琴弦,但我已经试过了,但似乎不起作用

这是我的日志:

12-08 17:50:14.126: A/dalvikvm(10616): @@@ ABORTING: DALVIK: HEAP MEMORY CORRUPTION IN dispose_chunk addr=0x0
12-08 17:50:14.126: A/libc(10616): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 10663 (Thread-13334)

任何帮助都将不胜感激

编辑

以下是我的getMotionActivityEngine的代码:

static MotionActivityEngine * getMotionActivityEngine(JNIEnv *env, jobject thiz)
{
    jclass clazz = env->GetObjectClass(thiz);
    jfieldID fieldId = env->GetFieldID(clazz, "motionActivityEngine", "J");
    jlong value = env->GetLongField(thiz, fieldId);
    return (MotionActivityEngine *)value;
}

编辑

这就是我在getMotionData之前正在做的事情:

byte motionData[] = new byte[8];
StringBuffer annotations = new StringBuffer("");
motionActivityEngine.getMotionData(motionData, annotations);

共 (0) 个答案