¿Debería llamar a ReleaseStringUTFChars si GetStringUTFChars devuelve una copia?


El libro "Essential JNI: Java Native Interface" de Rob Gordon contiene el siguiente ejemplo de código para convertir un jstring a una cadena C:

const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
    env->ReleaseStringUTFChars(str, utf_string);
}

Tenga en cuenta que solo llama a ReleaseStringUTFChars si isCopy es true.

Pero el libro Java Native Interface: Programmer's Guide and Specification (alternate link: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161) dice:

La llamada ReleaseString-Chars es necesario si GetStringChars tiene establezca * isCopy en JNI_TRUE o JNI_FALSE. O las barras de lanzamiento libera la copiar o desanclar la instancia, dependiendo sobre si GetStringChars tiene devolvió una copia o no.

Estoy en lo cierto al asumir que esto es un error en el libro de Gordon?

 66
Author: Flavio, 2011-05-02

1 answers

Sí, su suposición es correcta (siempre debe llamar a ReleaseStringUTFChars).

 56
Author: Brett Kail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-02 22:16:56