Program Tip

GetStringUTFChars가 복사본을 반환하면 ReleaseStringUTFChars를 호출해야합니까?

programtip 2020. 11. 2. 08:24
반응형

GetStringUTFChars가 복사본을 반환하면 ReleaseStringUTFChars를 호출해야합니까?


Rob Gordon의 "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);
}

true 인 ReleaseStringUTFChars경우 에만 호출 isCopy합니다.

그러나 Java Native Interface : Programmer 's Guide and Specification (대체 링크 :)http://192.9.162.55/docs/books/jni/html/objtypes.html#5161은 다음과 같이 말합니다.

ReleaseString-Chars 호출은 GetStringChars가 * isCopy를 JNI_TRUE 또는 JNI_FALSE로 설정했는지 여부에 관계없이 필요합니다. ReleaseStringChars는 GetStringChars가 복사본을 반환했는지 여부에 따라 복사본을 해제하거나 인스턴스 고정을 해제합니다.

이것이 Gordon의 책에있는 버그라고 가정하는 것이 맞습니까?


예, 가정이 맞습니다 (항상 ReleaseStringUTFChars를 호출해야 함).

참고 URL : https://stackoverflow.com/questions/5859673/should-you-call-releasestringutfchars-if-getstringutfchars-returned-a-copy

반응형