2011-05-25 50 views
0

設置一個給定的單元格的值我得到的ARR INT []從JVM並希望指定索引處設置一個值, 這樣的:在jintArray

jintArray arr; 
jint* ints = _env->GetIntArrayElements(arr, false); 
int newvalue = 4; 

_env->SetIntArrayRegion(ints, 3, 1, &newvalue); // this works 
inst[3] = newvalue; // this failed !!! 

你能告訴我爲什麼第二次分配失敗? 它應該工作並且要快得多(沒有方法調用)。

感謝, 呂克

+1

有問題的編碼或錯字?該數組被命名爲'ints',而不是'inst',因爲最後一行,用「this failed」註釋 – 2011-05-25 08:44:15

回答

-1

JIntArray本身不是原始陣列,它只是包含的基本數組。要設置值,可以使用set(int index,int value)方法(有關更多詳細信息,請參閱API),也可以使用JIntArray toArray()方法獲取數組,然後使用該數組。

在你的情況下,第一種方法是這樣的:

arr.set(3, newvalue); 
+1

我的問題涉及JNI主題。我們在這裏討論兩種不同的軟件。不管怎麼說,還是要謝謝你。 :) – Luc 2011-05-28 05:46:44

0

由於呂克提到,他是在談論JNI。一般的答案是JVM的GC可能會在後備存儲中移動到一個數組。類型jintArray只是一個typedef,它實際上只是表示一個數組的句柄。

如果正在操縱陣列,則必須使用SetIntArrayRegion,其中通過指針拷貝到後備存儲器,

OR可以使用的GetIntArrayElements的組合,這將針或複製陣列,其次是ReleaseIntArrayElements

由於jintArray不是合適的C數組,因此不能使用索引器運算符[]。