我是一个 JNI 新手,一个关于释放内存的问题阻止了我,如下所示:如果您将 ArrayList 从 Java 转换为 C,并将 ArrayList 元素从 String 数组中放入,例如:
jclass arrlist_cls = (*env)->FindClass(env,"java/util/ArrayList");
if(NULL==arrlist_cls)return;
jmethodID m_get = (*env)->GetMethodID(env,arrlist_cls,"get","(I)Ljava/lang/Object");
jmethodID m_size = (*env)->GetMethodID(env,arrlist_cls,"size","()I");
//get the ArrayList field from object
jfieldID fidArrStr = (*env)->GetFieldID(env,helloObj,"arrStr",
"Ljava/util/ArrayList;");
jobject ArrObj = (*env)->GetObjectField(env,paramsObj,fidArrStr);
if(NULL==ArrObj)return;
int len = (*env)->CallIntMethod(env,ArrObj,size_method);
int i=0; const char **ArrStr;
for(i=0;i<len;i++){
jstring jstr = (jstring)(*env)->CallObjectMethod(env,ArrObj,get_method,i);
ArrStr[i]=jstr;
}
我怎样才能像单个String一样释放它?你知道,单个String可以使用ReleaseStringUTFChars的方法来释放,我怎样才能释放一个数组对象内存?因为 String 不是原始类型,所以我找不到 要使用的ReleaseArrayElements方法。