71 votes

Devez-vous appeler ReleaseStringUTFChars si GetStringUTFChars en a renvoyé une copie?

Le livre "l'Essentiel JNI: Java Native Interface" par Rob Gordon contient l'exemple de code suivant pour convertir un jstring à une 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 n'appelle qu' ReleaseStringUTFChars si isCopy est vrai.

Mais le livre de Java Native Interface: Guide du Programmeur et de Spécification (autre lien: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161) dit:

Le ReleaseString-Chars appel est nécessaire si GetStringChars a *isCopy à JNI_TRUE ou JNI_FALSE. ReleaseStringChars soit libère l' copie ou unpins l'instance, selon si GetStringChars a renvoyé une copie ou pas.

Je suis bon en supposant que c'est un bug dans Gordon livre?

61voto

bkail Points 16610

Oui, votre hypothèse est correcte (vous devez toujours appeler ReleaseStringUTFChars).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X