java-native-interface - libc:致命信号 11 (SIGSEGV),代码 1,故障地址 0xcdb8007c
问题描述
我Fatal signal 11 (SIGSEGV), code 1
在stackoverflow上看到了很多问题,但没有人给出答案。
我的 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
改变了内存大小。我怀疑是内存错误引起的错误。我不知道代码是如何导致这个的。
解决方案
ReleaseByteArrayElements(srcdata_, srcdata, 0)
GetByteArrayElements
如果给你一个数组数据的副本,将会失败,因为你已经增加srcdata
了,所以它不再包含你从GetByteArrayElements
.
此外,您的 while 循环可能会访问超出数组末尾的数据,因为您没有考虑 的值GetArrayLength(srcdata_)
。
推荐阅读
- javascript - 如何使用 ajax 和 laravel 从 arduino 获取 url 值?
- python - 如何编写这个自定义损失函数,以便为每个样本产生损失?
- amazon-web-services - Cloudwatch 仪表板:具有独立时间范围的小部件?
- c++ - 当子元素位于父类向量中时,访问父类中的子成员
- reactjs - Filter links in React Props
- python - 创建一个按钮列表,其中每个按钮都会记住其相应的命令
- php - 发布按钮适用于本地服务器,但不适用于我的实时 Web 服务器
- r - R 和 R studio 不会加载 aplpack
- linux - 如何在使用 systemd 退出 docker-machine 之前运行 docker 命令?
- java - 如何使同一类的两个对象相互通信/w?