java - 如何释放字符**

标签 java c++ java-native-interface

如何在jni中释放char**? 我在下面找不到任何 env 函数来释放 pstr

Java_com_example_test(
JNIEnv* env,jobject,jobjectArray content){
 jsize len = env->GetArrayLength(content);
 char **pstr = (char**)malloc(len* sizeof(char*));
 jstring jstr;
 for (int i=0; i<len;i++){
     jstr = (jstring)env->GetObjectArrayElement(content,i);
     pstr[i]=(char*) env->GetStringUTFChars(jstr,0);
 }
 env->DeleteLocalRef(jstr);
 // todo release pstr

最佳答案

free(pstr);
pstr = NULL;

会释放malloc分配的内存,但在此之前你需要释放VM分配的内存以防止内存泄漏。 来自 Java SE doc

 const char * GetStringUTFChars(JNIEnv *env, jstring string,
jboolean *isCopy);

返回一个指向字节数组的指针,该字节数组表示修改后的 UTF-8 编码中的字符串。 该数组在被 ReleaseStringUTFChars() 释放之前一直有效。

关于java - 如何释放字符**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447790/

相关文章:

java - “Highgui 无法解析”、JavaCV、Eclipse

c++ - 将 "ascii art"printf 放入 char 数组?

Java JNA加载DLL

java - 在多个 jni 调用中保持某种 c++ 对象存活

java - 使用语音命令搜索

java - Jersey Restful 服务 - 无法连接到服务器

java - 在 JDBC 和控制台之间插入 postgreSQL 函数结果时的不同结果格式

.net - ASP.NET 是否支持 C++?

c++ - 如何使用 GDB 进入一个函数而不是它的参数

java.lang.UnsatisfiedLinkError - 加载多个 lib 文件?