0

这个 jni 正在工作,但我可能有内存泄漏问题(我认为),

任何人都可以帮助释放以下内存:

class arrayCls = env->GetObjectClass(Array1);
len11 = env -> GetArrayLength(Array1);
jintArray dim1= (jintArray) env->GetObjectArrayElement(Array1, 0);
len12 = env -> GetArrayLength(dim1);

localArray1= new jint*[len11];
for(jint i=0; i<len11; ++i){ 
    jintArray oneDim1=  (jintArray)env->GetObjectArrayElement(Array1, i); 
    jint *element1=env->GetIntArrayElements(oneDim1, 0); 

    localArray1[i] = new jint[len12]; 
    for(jint j=0; j<len12; ++j) { 
        localArray1[i][j]= element1[j]; 
        env->ReleaseIntArrayElements(oneDim1, element1, 0); 
    } 
} 
4

1 回答 1

1

这是错误:

for(jint j=0; j<len12; ++j) { 
    localArray1[i][j]= element1[j]; 
    env->ReleaseIntArrayElements(oneDim1, element1, 0); 
} 

你必须搬家

env->ReleaseIntArrayElements(oneDim1, element1, 0); 

在循环之外。无论如何,您应该更喜欢 GetIntArrayRegion() ,因为它是无状态的,因此可以避免此错误。

于 2015-03-22T13:21:04.863 回答