Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要清理传递给NewStringUTF的字符*吗?_Java_Java Native Interface - Fatal编程技术网

Java 我需要清理传递给NewStringUTF的字符*吗?

Java 我需要清理传递给NewStringUTF的字符*吗?,java,java-native-interface,Java,Java Native Interface,我想是的,但我发现的前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, job

我想是的,但我发现的前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;
}

对。(这样看起来就不会没有答案了。)

关注内存泄漏是很好的,但是,在这种情况下,没有泄漏(原始示例)。“常量字符串”是一个文本字符串;它不是从堆中分配的

因此,不需要,您不需要清除传递的char*(原始示例)

你编辑的例子更能说明你的观点。在已编辑的示例中,是的,您需要清理传递的字符串