Le livre "Essential JNI: Java Native Interface" de Rob Gordon contient l'exemple de code suivant pour convertir une chaîne jstring en chaîne C:
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
Notez qu'il appelle uniquement ReleaseStringUTFChars
si isCopy
est vrai.
Mais le livre Java Native Interface: Programmer's Guide and Specification (lien alternatif: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
) dit:
L'appel ReleaseString-Chars est nécessaire que GetStringChars ait défini * isCopy sur JNI_TRUE ou JNI_FALSE. ReleaseStringChars libère la copie ou débloque l'instance, selon que GetStringChars a renvoyé une copie ou non.
J'ai raison de supposer que c'est un bug dans le livre de Gordon?
Oui, votre hypothèse est correcte (vous devez toujours appeler ReleaseStringUTFChars).