Следует ли вызывать ReleaseStringUTFChars, если GetStringUTFChars вернул копию?


книга" Essential JNI: Java Native Interface " Роба Гордона содержит следующий пример кода для преобразования jstring в строку 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 - это правда.

но книги Java Native Interface: руководство программиста и спецификация (альтернативная ссылка: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161) говорит:

вызов ReleaseString-Chars необходимо ли GetStringChars имеет установить *isCopy в JNI_TRUE или JNI_FALSE. ReleaseStringChars либо освобождает копирование или открепление экземпляра, в зависимости после того GetStringChars имеет вернул копию или нет.

Я прав, предполагая, что это ошибка в книге Гордона?

1 66

1 ответ:

Да, ваше предположение верно (вы всегда должны вызывать ReleaseStringUTFChars).