В книге "Essential JNI: Java Native Interface" Роб Гордона приведен следующий пример кода для преобразования строки в строку C:
const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
env->ReleaseStringUTFChars(str, utf_string);
}
Обратите внимание, что он вызывает только ReleaseStringUTFChars
, если isCopy
- true.
Но книга Java Native Interface: Руководство программиста и спецификация (альтернативная ссылка: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161
) говорит:
Вызов ReleaseString-Chars необходимо ли GetStringChars set * isCopy - JNI_TRUE или JNI_FALSE. ReleaseStringChars либо освобождает копировать или блокировать экземпляр, в зависимости от о том, имеет ли GetStringChars вернул копию или нет.
Я правильно понял, что это ошибка в книге Гордона?