Bonjour,
j'ai une question sur l'utilisation de Release<type>ArrayElements. Je sais qu'il faut l'appeler afin de faire un "commit" des modifications faites sur un tableau.
Mais j'ai dans certaines discussions (pas sur toutes), qu'il fallait toujours l'appeler, même si un tableau n'avait pas été modifié.
Dans ce petit code, j'aurai tendance à ne l'appeler que pour le tableau de double, car il est modifié. Je ne l'appellerai pas pour le tableau d'int, car ce n'est qu'un pointeur local qui devrait donc être supprimé à la sortie de la fonction.
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 JNIEXPORT jobject JNICALL Java_measures_miniball_Miniball_Compute2D (JNIEnv *env, jobject obj, jintArray Xarray, jdoubleArray Infos) { int length = env->GetArrayLength(Xarray) ; int* X = env->GetIntArrayElements(Xarray, 0) ; // On récupère un pointeur sur le tableau. double* infos = env->GetDoubleArrayElements(Infos, 0) ; // On récupère un pointeur sur le tableau. // Je ne modifie que le tableau de double infos[0] = 0.0 ; infos[1] = 1.0 ; env->ReleaseDoubleArrayElements(Infos, infos, 0) ; // Le commit... return NULL ; }
Ai je raison ? (Ca m'ennuierait d'avoir des fuites mémoire :p)
Merci par avance.
Partager