Следует ли вызывать ReleaseStringUTFChars, если GetStringUTFChars вернул копию? - PullRequest
69 голосов
/ 02 мая 2011

Книга Роберта Гордона «Essential JNI: собственный интерфейс Java» содержит следующий пример кода для преобразования 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 имеет значение true.

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

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

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

1 Ответ

59 голосов
/ 03 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...