以下代码为jni创建java数组的int数组, 为什么我们需要创建一个temp []数组,为什么我们不能只填充结果[]数组并将其返回给java。是否因为java和jni应该使用不同的内存空间,因此两个不同的指针?如果是这样,那么目的是什么?谢谢为什么需要创建一个用于将数组从jni返回给java的临时数组
JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size)
{
jintArray result;
result = (*env)->NewIntArray(env, size);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
int i;
// fill a temp structure to use to populate the java int array
jint temp[256];
for (i = 0; i < size; i++) {
temp[i] = 0; // put whatever logic you want to populate the values here.
}
// move from the temp structure to the java structure
(*env)->SetIntArrayRegion(env, result, 0, size, temp);
return result;
}
在你的榜样,什么是env-> GetIntArrayElements(输入,NULL)究竟回报?内存中输入的地址?如果是这样,inputArray和输入应该是完全相同的元素? – henryyao
该方法有一个错字,但我修复了它。它返回的是指向数组元素的指针(如果失败,则返回null)。 'input',使用'GetIntArrayElements'存储指向'inputArray'的指针,您可以获取该指针或根据最后一个参数(true/false)创建一个副本。它与“输入”不同。 –