libc:致命信号11(SIGSEGV),代码1,故障加法器0xcdb8007c

时间:2018-06-21 08:31:35

标签: java-native-interface

我在stackoverflow上看到了许多关于Fatal signal 11 (SIGSEGV), code 1的问题,但是没有人有答案。

我的JNI代码:

JNIEXPORT jbyteArray JNICALL
Java_com_btc_testtwo_ProxyApplication_decrypt(JNIEnv *env, jobject instance,
                                              jbyteArray srcdata_) {
    jbyte *srcdata = env->GetByteArrayElements(srcdata_, NULL);
    print_debug("come in");
    while (*srcdata) {
        *srcdata ^= 0xF;
        *srcdata++;
    }
    print_debug("come out");
    env->ReleaseByteArrayElements(srcdata_, srcdata, 0);
}

我想知道位操作XOR是否改变了内存大小。我怀疑是由内存错误引起的错误。我不知道代码是如何引起的。

1 个答案:

答案 0 :(得分:0)

如果ReleaseByteArrayElements(srcdata_, srcdata, 0)为您提供了阵列数据的副本,则

GetByteArrayElements将失败,因为您已经增加了srcdata,以使其不再包含从{{ 1}}。

此外,由于您没有考虑GetByteArrayElements的值,因此while循环可能会访问数组末尾的数据。