Dois-je nettoyer le caractère * transmis à NewSsortingngUTF?

Je pense que oui, mais les 12 meilleurs exemples que j’ai trouvés font tous quelque chose de non illustratif, comme

JNIEXPORT jssortingng JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) { return (*env)->NewSsortingngUTF(env, "constant ssortingng"); } 

donc pour la postérité, je demanderai: c’est mauvais, oui?

 JNIEXPORT jssortingng JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) { char *leak = malloc(1024); leak[0] = '\0'; return (*env)->NewSsortingngUTF(env, leak); } 

… et devrait être:

 JNIEXPORT jssortingng JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj) { char *emptyssortingng = NULL; jssortingng r = NULL; emptyssortingng = malloc(1024); emptyssortingng[0] = '\0'; r = (*env)->NewSsortingngUTF(env, emptyssortingng); free(emptyssortingng); emptyssortingng = NULL; return r; } 

Oui. (Juste pour que cela ne semble pas sans réponse.)

Il est bon d’être préoccupé par les memory leaks, cependant, dans ce cas, il n’y a pas de fuite (exemple initial). “chaîne constante” est une chaîne littérale; il n’est pas alloué à partir du tas.

Donc, non, vous n’avez pas besoin de nettoyer le caractère * passé (exemple original).

Vos exemples édités sont meilleurs pour illustrer votre propos. Dans l’exemple modifié, oui, vous devez nettoyer la chaîne transmise.