如何释放char **

时间:2019-04-01 03:33:29

标签: java c++ java-native-interface

如何在jni中释放char **? 我没有找到任何能在下面释放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

1 个答案:

答案 0 :(得分:1)

free(pstr);
pstr = NULL;

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

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

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