Bonjour,
Dans le code natif de JNI, dans certains cas on "lève des exceptions".
Mais comment fait-on si l'on désire un message d'erreur "dynamique" (pour y inclure des variables) ? En particulier, quand appeler le "free()" sur le char* ?
Si je fais ça :
est-ce correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 char *msg = (char *) malloc(32 * sizeof(char)); int value = ...; if (value <= 0) { snprintf(msg, 32, "value must be positive: %d", value); (*env)->ThrowNew(env, cl_exception, msg); free(msg); /* is it correct? */ return; }
Est-ce que ThrowNew fait une copie de "msg" ?
Je pense que c'est le cas, sinon c'est problématique.
Cela veut-il dire qu'à chaque fois qu'on passe un char * (par exemple) à une fonction qui doit en garder une référence, elle doit toujours faire une copie du contenu ?
Partager