【发布时间】:2013-06-04 06:38:30
【问题描述】:
我是一个JNI navice,一个关于释放内存的问题阻止了我,场景如下: 如果您已将 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 方法来使用。
【问题讨论】:
-
您的问题似乎与 JNI 无关。这里没有“数组对象内存”。您似乎正在寻找
free()函数;否则不是一个真正的问题。 -
请显示更多您的代码。尚不清楚分配给
strArr的内容。 -
你好,我添加了这个问题的一些代码和详细过程,你能看看吗? :-)
-
一般它不会被释放,它只是逃跑。 (什么?哦,我以为你在谈论应用程序。)
-
看什么?你在问什么?
ArrObj?ArrStr?这里有什么问题?