我在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
是否改变了内存大小。我怀疑是由内存错误引起的错误。我不知道代码是如何引起的。
答案 0 :(得分:0)
ReleaseByteArrayElements(srcdata_, srcdata, 0)
为您提供了阵列数据的副本,则 GetByteArrayElements
将失败,因为您已经增加了srcdata
,以使其不再包含从{{ 1}}。
此外,由于您没有考虑GetByteArrayElements
的值,因此while循环可能会访问数组末尾的数据。