Das Buch "Essential JNI: Java Native Interface" von Rob Gordon enthält das folgende Codebeispiel zum Konvertieren eines Jstrings in einen C-String:
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
Beachten Sie, dass nur aufgerufen wird, ReleaseStringUTFCharswenn dies der isCopyFall ist.
Das Buch Java Native Interface: Programmierhandbuch und Spezifikation (alternativer Link :) http://192.9.162.55/docs/books/jni/html/objtypes.html#5161lautet jedoch:
Der Aufruf von ReleaseString-Chars ist erforderlich, unabhängig davon, ob GetStringChars * isCopy auf JNI_TRUE oder JNI_FALSE gesetzt hat. ReleaseStringChars gibt entweder die Kopie frei oder hebt die Instanz auf, je nachdem, ob GetStringChars eine Kopie zurückgegeben hat oder nicht.
Ich gehe zu Recht davon aus, dass dies ein Fehler in Gordons Buch ist.
strdefiniert?