Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1802 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JNI : Utilisation objet C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JNI : Utilisation objet C++

n°558497
scool36
Vive les Ours
Posté le 04-11-2003 à 12:28:20  profilanswer
 

Bonjour,
Je sais j'ai un post qui est un peu beaucoup pareil, mais il est pas tres clair alors je me dis que c'est peut etre pour ca que les gens repondent pas.
 
Mon probleme est le suivant :
J'essaie de creer un objet C++ dans une fonction native JNI, executer cet objet a l'aide de la fonction run, et renvoyer une valeur. La facon dont je l'utilise marche genre 10 fois, ou 20 fois , ou 30 fois d'affiler, ca depend, et apres je me tappe une erreur de segementation. Il semblerait que de la memoire est alloue mais pas libere :
 

Citation :


//Voici mon code :
 
#include <iostream>
#include "uk_ac_wmin_cpc_madcityc_impl_MadCityCImpl.h"
#include "GT3MadCity.h"
 
JNIEXPORT jint JNICALL Java_uk_ac_wmin_cpc_madcityc_impl_MadCityCImpl_MadCityS(JNIEnv *, jclass, jint pied) {
     
        MadCity MC;
        MC.run_MadCity(pied);
        return(MC.cartotal);
}


 
J'ai vu que par exemple pour creer un objet simple "String", il fallait faire comme ca :
         str = (*env)->NewStringUTF("hello" );
Et pour liberer la memoire de la reference locale JNI il fallait faire ca :
         (*env)->DeleteLocalRef(env, str);
 
Ma question principale est : est-ce que la facon dont je cree et utilise mon objet est choquante????, comment feriez vous a ma place????
Ensuite :
Dois-je utiliser (*env) pour gerer mon objet dans la fonction native, si oui comment????
Comme je n'utilise pas (*env) ,est-ce qu'une reference locale a l'objet est cree quand meme??? si oui comment dois-je la detruire?????
 
 
Merci...merci :bounce:
 


---------------
La meilleure facon d'en apprendre toujours plus, c'est de ne pas retenir ce qu'on nous dit.
mood
Publicité
Posté le 04-11-2003 à 12:28:20  profilanswer
 

n°559407
BifaceMcLe​OD
The HighGlandeur
Posté le 05-11-2003 à 10:52:56  profilanswer
 

Si tu veux créer un objet purement C++ dans ton code natif, ou de manière générale toute structure exclusivement C ou C++, alors tu n'as rien de particulier à faire. Les new/delete et les malloc/free s'utilisent de la même manière qu'habituellement, et avec les mêmes risques que dans un programme purement C ou C++.
 
Par contre, si tu veux allouer un objet Java dans ton code native, comme par exemple une chaine de caractères, alors il faut utiliser les méthodes de la classe JNIEnv.
 
Maintenant, pour régler ton problème de segmentation, il n'y a pas 50 façons de savoir où ça se passe : le débogueur.

n°559414
BifaceMcLe​OD
The HighGlandeur
Posté le 05-11-2003 à 10:57:15  profilanswer
 

Après avoir lu ton autre topic, je précise ma réponse : ton objet MC est local à ta fonction, sa construction est faite par le compilateur, donc le destructeur sera appelé par le compilateur. Par contre, si tu observe des erreurs ou des fuites mémoire, c'est certainement que le destructeur de MadCity ou un de ceux qu'il invoque (directement ou indirectement) fait mal son boulot.

n°560779
scool36
Vive les Ours
Posté le 06-11-2003 à 12:16:30  profilanswer
 

Merci a toi BifaceMcLeOD....
 
En ce qui concerne le programme que j'utilise, qui n'est pas le mien ils se sont rendus comptent qu'ils avaient geres ca un peu a l'arrache, et qu'en effet leurs destructeurs etait un peu absent ou  tres peu present.
C'est l'environnement qui se charchait donc de liberer la memoire, donc quand j'utilisais juste JNI, la fin d'exectution faisait qu'unix liberer les ressources.
Le truc c'est qu'on l'utilise avec GLOBUS en tant que Grid Service, et cette utilisation ne permet pas la liberation des ressources a chaque execution...
 
Merci encore :hello:


---------------
La meilleure facon d'en apprendre toujours plus, c'est de ne pas retenir ce qu'on nous dit.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JNI : Utilisation objet C++

 

Sujets relatifs
Creer une instance d'Objet C++ dans JNIRécupérer l'objet class dont dépend la méthode statique appelée
commande dos pour supprimer fichier en utilisation"utilisation incorrecte du mot clé new"
Utilisation de pear?Gerer les exception avec JNI
documentation sur l orienté objet[C++] Utilisation de msxml DOM
Dupliquer un objet, et non faire une référence 
Plus de sujets relatifs à : JNI : Utilisation objet C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR