[英]JNI Exception: jarray is an invalid global reference
通過CheckJNI從JNI獲取以下異常。
JNI DETECTED ERROR IN APPLICATION: jarray is an invalid global reference: 0x8f635e1e (0xdead4321)
發生在:
uint32_t* ConvertIntArray(JNIEnv *env, jclass cls, jintArray intArray)
{
return (*env)->GetIntArrayElements(env, intArray, NULL);
}
稱為:
uint32_t* indexes = ConvertIntArray(env, cls, planeLengths);
在:
jlong Java_<censored>(JNIEnv *env, jclass cls, jlong state, jintArray planeLengths)
一切都發生在上述函數中,因此不會進行全局引用。 planeLengths直接傳遞到ConvertIntArray中,該函數應返回其uint32指針。 Google也沒有針對JNI錯誤的結果。
注意:以上幾行是在完成所有C預處理之后的。 有幾個宏可以替換為不同的代碼,這就是為什么ConvertIntArray函數似乎毫無意義的原因。
我的大學和我自己陷入了困境。 有什么想法嗎?
因此,事實證明這是內存損壞。 在問題中,我截斷了幾個長參數以使問題更短。 事實證明,Java傳遞的是int而不是longs,后者是較小的變量,將一些指針移回了。 因此,它基本上破壞了工作對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.