看來下面的代碼正在泄漏內存。我檢查了JVM內存利用率,並且在隨後的調用後沒有釋放內存。當我以獨立方式運行Java時,它可以很好地處理多個調用並保持釋放內存的功能。JNI Java從C內存泄漏
我真的很感激任何幫助。
jobjectArray my_obj = (jobjectArray) env->CallObjectMethod(cls, mid, qstr, pstr);
length = env->GetArrayLength(my_obj);
//printf("\nArray Length = %d \n", length);
char result[256];
const char *cstr;
int numberOfCharsInThisRow = 0;
array1 = (char **)malloc(length * sizeof(char *));
/*Check if pointer is null, if not then free its memory first*/
for(int i=0; i< length ; i++){
cstr = env->GetStringUTFChars((jstring)env->GetObjectArrayElement(my_obj,i), 0);
numberOfCharsInThisRow = std::strlen(cstr)+1;
*(array1+i)=(char *)malloc(numberOfCharsInThisRow * sizeof(char));
std::strcpy(result, cstr);
std::strcpy(*(array1+i),result);
env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(my_obj,i), cstr);
}
env->DeleteLocalRef(my_obj);
}
//printf("\n\nDestroy JVM\n\n");
//jvm->DestroyJavaVM();
}
空隙libdeallocatememory(字符**數組1,INT長度) { // printf的( 「自由陣列存儲器\ n」);
for (int j=0 ;j <length ;j ++)
{
free(array1+j);
}
free(array1);
}
我假設你釋放你的某個時間點分配的指針和這個心不是你所談論的 – jogabonito
你好泄漏,沒有沒有調用釋放指針,心不是ReleaseStringUTFChars和DeleteLocalRef照顧它?如果您願意告訴我我需要釋放哪些指針,我將不勝感激 – ShamsR