java - 我需要清理传递给 NewStringUTF 的 char* 吗?

标签 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, 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;
}

最佳答案

是的。 (只是为了让这看起来不是没有答案。)

关于java - 我需要清理传递给 NewStringUTF 的 char* 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827549/

相关文章:

java - 如何优化 Held-Karp 算法的 java 实现以缩短运行时间?

Java/TCP 流量类

java - JSF : PropertyNotFoundException The class '' does not have the property ''

java - 不在 Spark sql java 中的函数中

java - 如何在C++ JNI中接收java方法返回的set<String>,是否可以将jobject转换为set<String>?

android - 什么是 Android JNI 应用程序上下文中的模块?

java - 我的 android 代码可以在 Android 2.2 上成功运行,但是不能在 Android 4.2.2 上运行

android-studio - 在android studio中以C代码输入JNI函数时的art_sigsegv_fault

java - 使用按钮将文件添加到 JList

java - JNI/JNA 与 Runtime.getRuntime().exec(String)?