Erhalte die folgende Ausnahme von JNI über CheckJNI.JNI-Ausnahme: jarray ist eine ungültige globale Referenz
JNI DETECTED ERROR IN APPLICATION: jarray is an invalid global reference: 0x8f635e1e (0xdead4321)
geschieht während:
uint32_t* ConvertIntArray(JNIEnv *env, jclass cls, jintArray intArray)
{
return (*env)->GetIntArrayElements(env, intArray, NULL);
}
, die aus aufgerufen:
uint32_t* indexes = ConvertIntArray(env, cls, planeLengths);
, die ist:
jlong Java_<censored>(JNIEnv *env, jclass cls, jlong state, jintArray planeLengths)
Alles geschieht innerhalb der oben genannten Funktion, so dass keine globalen Referenzen werden hergestellt. planeLengths wird direkt in ConvertIntArray übergeben, das den uint32-Zeiger zurückgeben soll. Google hat auch keine Ergebnisse zum JNI-Fehler.
Hinweis: Die obigen Zeilen sind nach der C Vorverarbeitung erfolgt. Es gibt mehrere Makros, die in verschiedenen Code ersetzen, weshalb die ConvertIntArray-Funktion sinnlos scheint.
Mein Kollege und ich sind ratlos. Irgendwelche Gedanken?
Woher kommt 'planeIndexes'? Ihre JNI-Funktion empfängt ein 'jintArray', das heißt jedoch 'planeLengths'. – Michael
Mein schlechtes. Ich habe die meisten Argumente gekürzt, aber den falschen zurückgelassen. –
Ich würde sagen, Sie haben eine Speicherbeschädigung woanders. – EJP