2016-02-29 74 views
0

我有兩個數組:如何檢查兩個JNI數組指向同一個內存位置?

auto inputArray = reinterpret_cast<jbyteArray>(mainEnv->NewGlobalRef(imageDataArray)); 
auto output = reinterpret_cast<jfloatArray>(mainEnv->NewGlobalRef(data)); 

當我嘗試:

auto input = env->GetByteArrayElements(inputArray, nullptr); 

我得到這個錯誤:

「JNI檢測到的錯誤應用:嘗試獲取字節基本數組元素用浮子式[]的目的」

我的猜測是‘inputArray’(字節陣列)指向的相同的存儲器位置‘輸出’(float數組)。

我該如何檢查?

+0

鑄造'jobject'使得它不會改變基本的Java對象的類型沒有什麼意義。如果您確實需要以非實際類型的方式訪問數據,則應在獲取本機指針後執行轉換。 – Michael

+0

這些是Java中的真實類型。我正在施放他們,因爲我想在本地環境中與他們一起工作。所以「inputArray」是兩個環境中的一個字節數組。我已經檢查過很多次了,所以我不能再數了。 :( –

+1

好吧,我建議你寫一個完整的最小代碼示例,可以用來重現這個問題。如果這個例子沒有最終出現同樣的問題,那麼你需要確定它與真實的不同之處碼。 – Michael

回答

2

如果你可以告訴兩個對象引用指向用JNI IsSameObject功能相同的對象。

錯誤消息告訴你,你在float[]調用GetByteArrayElements。獲取數組對象的類(GetObjectClass)將讓您查詢的類別在它傳遞到本地代碼點的對象,這樣你就可以確認陣列具有你所期望的類型。從那裏你可以縮小你的焦點並找出事情出錯的地方。

相關問題