我是否需要清理传递给NewStringUTF的char*?

dsi*_*mms 10 java java-native-interface

我想是的,但是我发现的前12个例子都做了一些非说明性的事情

JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
  return (*env)->NewStringUTF(env, "constant string"); 
}
Run Code Online (Sandbox Code Playgroud)

所以后人我会问:这很糟糕,是吗?

JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
  char *leak = malloc(1024);
  leak[0] = '\0';
  return (*env)->NewStringUTF(env, leak); 
}
Run Code Online (Sandbox Code Playgroud)

......应该是:

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;
}
Run Code Online (Sandbox Code Playgroud)

dsi*_*mms 10

是.(只是这样看起来没有答案.)