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 :
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 correct ?

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 ?