Newstringutf에 전달 된 숯*을 정리해야합니까?
-
05-07-2019 - |
문제
예라고 생각하지만 내가 발견 한 가장 큰 12 가지 예는 모두와 같은 일을하지 않습니다.
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
return (*env)->NewStringUTF(env, "constant string");
}
그래서 후손을 위해 나는 물어볼 것입니다 : 이것은 나쁘다, 그렇습니까?
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
char *leak = malloc(1024);
leak[0] = '\0';
return (*env)->NewStringUTF(env, leak);
}
... 그리고해야합니다 :
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
char *emptystring = NULL;
jstring r = NULL;
emptystring = malloc(1024);
emptystring[0] = '\0';
r = (*env)->NewStringUTF(env, emptystring);
free(emptystring);
emptystring = NULL;
return r;
}
해결책
예. (그냥 대답하지 않은 것처럼 보이지 않습니다.)
다른 팁
메모리 누출에 대해 걱정하는 것이 좋지만이 경우 누출이 없습니다 (원래 예). "Constant String"은 문자 그대로 문자열입니다. 힙에서 할당되지 않습니다.
따라서, 당신은 숯 * 통과를 정리할 필요가 없습니다 (원본 예).
편집 된 예제는 요점을 설명하는 데 더 좋습니다. 편집 된 예에서는 전달 된 문자열을 정리해야합니다.
제휴하지 않습니다 StackOverflow