以下代碼爲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)創建一個副本。它與「輸入」不同。 –