Il semble que le code suivant fuit la mémoire. J'ai vérifié l'utilisation de la mémoire JVM et il ne libère pas de mémoire après les appels suivants. Lorsque je lance le Java en mode autonome, il fonctionne correctement pour plusieurs appels et permet de libérer la mémoire correctement.Java JNI de fuite de mémoire C
J'apprécierais vraiment toute aide.
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 vide (char ** array1, longueur int) { // printf ("mémoire Array libre \ n");
for (int j=0 ;j <length ;j ++)
{
free(array1+j);
}
free(array1);
}
Je suppose que vous libérez les pointeurs vous avez attribués à un certain moment et ce nest pas la fuite que vous parlez – jogabonito
Bonjour, pas il n'y a pas d'appels à libérer les pointeurs, ISNT ReleaseStringUTFChars et DeleteLocalRef s'en occupent? J'apprécierais si vous me direz s'il vous plaît quels pointeurs j'ai besoin de libérer – ShamsR