Java 修改指针的JNI方法

Java 修改指针的JNI方法,java,java-native-interface,Java,Java Native Interface,有特殊问题的。当我调用下面的JNI方法时 jobjectArray array = env->NewObjectArray(list->size, jclass, 0); 现在,list->size设置为54。但是,只要运行上面的代码,同一个指针就会返回,2405015736发生了什么?As也会影响结构其余部分中保存的值。设置静态值,即 jobjectArray array = env->NewObjectArray(54, jclass, 0) 也没有效果。有什么想法吗?

有特殊问题的。当我调用下面的JNI方法时

jobjectArray array = env->NewObjectArray(list->size, jclass, 0);
现在,
list->size
设置为54。但是,只要运行上面的代码,同一个指针就会返回,
2405015736
发生了什么?As也会影响结构其余部分中保存的值。设置静态值,即

jobjectArray array = env->NewObjectArray(54, jclass, 0)
也没有效果。有什么想法吗?我被难住了

(jclass是一个加载的类对象
jclass=env->FindClass(“name”);


谢谢

您的问题是大小可能不是“jsize”类型,因此必须进行转换。现在,这一切都会很好,但JNI是一个绝对痛苦的东西。我认为发生的事情是,您的堆栈由于一个被解释为太大的数字而损坏。或者类似的。只需按如下方式进行大小转换:

jint msize = list->size;
jobjectArray array = env->NewObjectArray(msize, jclass, 0);

这应该可以达到目的。

相同的指针?你这是什么意思?另外,使用jclass而不是proc_jclass。所谓“为什么要干扰列表结构中的所有内容”是指
list->size
jobjectArray=env->NewObjectArray(list->size,jclass,0)
之前是54,但是
list->size
之后是
2405015736
?如果是这样,我认为您需要发布
列表的类型
,如何为
*列表
分配空间,以及如何初始化
*列表
。似乎
list
是堆栈中的一个指针,它会导致各种问题;然后列表创建(列表);调用以接收该列表指针并对结构进行更改。
list\u create
的函数签名是什么?JNIEXPORT jobjectArray JNICALL Java\u example\u JNI\n列表(JNIEnv*env,jobject jobj)有趣的是它工作了,但是为什么要干扰列表结构中的所有内容呢?堆栈损坏:)我相信,大小变量问题导致分配耗尽了所有可用内存。如果它有效,请接受作为答案!:同样,如果你从一个函数返回一个数字,确保你做了类似的事情,并首先使用一个中间持有者!JNI是如此痛苦:)事实上,我不太确定它为什么工作,也许它不是堆栈损坏。也许其他人可以对这个问题有更多的了解?也许是堆损坏,而不是一个狡猾的指针。