문제

예라고 생각하지만 내가 발견 한 가장 큰 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"은 문자 그대로 문자열입니다. 힙에서 할당되지 않습니다.

따라서, 당신은 숯 * 통과를 정리할 필요가 없습니다 (원본 예).

편집 된 예제는 요점을 설명하는 데 더 좋습니다. 편집 된 예에서는 전달 된 문자열을 정리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top