【问题标题】:how to release char**如何释放字符**
【发布时间】:2019-04-01 03:33:29
【问题描述】:

如何在 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);?是否必须释放从GetStringUTFChars 获得的字符串?

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


【解决方案1】:
free(pstr);
pstr = NULL;

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2011-11-11
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多