Quote:
Le Mot réservé delete sur la classe TinyXmlNode fait planté le programme.
delete pointeur_sur_TinyXmlNode tu veux dire ? Par exemple delete tiNodeFils ?
Si ça plante, c'est que le pointeur n'était pas valide, pour une raison ou une autre. Ou dans ton cas sans doute que delete est appelé deux fois, une fois par toi, une fois par la librairie
Quote:
Ce qui est normale puisque la plupart du temps on ne fait pas d'appel au mot réservé new. Mais est-ce une bonne chose ? Est-ce que ne pas utilisé new et delete va pas poser des problèmes de fuite de mémoire ou autre ?
Je ne sais pas exactement car tu ne montres pas de code et aussi et surtout TinyXml est (très) loin de mes préoccupations en ce moment.
MAIS, je dirais quand même que c'est sans doute une bonne chose dans ce cas. Quand tu écris:
TinyXmlNode *tiNodeFils = tiNode1->FirstChild();
La librairie te renvoie un pointeur, MAIS pas forcément en créant une instance. Je dirais même probablement pas. Bref par cette ligne de code tu as une adresse et c'est tout. A priori tu ne dois pas faire de delete dessus, c'est la librairie qui va s'en charger quand tu vas faire un delete sur la racine par exemple. Si tu as déjà fait un delete avant sur un noeud, il y aura un pointeur invalide quelque part dans l'arborescence XML et ça va planter quand la librairie voudra effacer le tout.
Sans compter que peut être, la librairie a implémenté un allocateur à elle.
Enfin tout ça c'est des suppositions, faut regarder ce que raconte la doc à ce niveau et éventuellement un peu de ton code. Mais au pif, je dirais volontiers qu'il est normal de ne pas invoquer delete dans ce cas, et ceci sans avoir de fuites mémoire pour autant :)
delete pointeur_sur_TinyXmlNode tu veux dire ? Par exemple delete tiNodeFils ?
Si ça plante, c'est que le pointeur n'était pas valide, pour une raison ou une autre. Ou dans ton cas sans doute que delete est appelé deux fois, une fois par toi, une fois par la librairie
Je ne sais pas exactement car tu ne montres pas de code et aussi et surtout TinyXml est (très) loin de mes préoccupations en ce moment.
MAIS, je dirais quand même que c'est sans doute une bonne chose dans ce cas. Quand tu écris:
La librairie te renvoie un pointeur, MAIS pas forcément en créant une instance. Je dirais même probablement pas. Bref par cette ligne de code tu as une adresse et c'est tout. A priori tu ne dois pas faire de delete dessus, c'est la librairie qui va s'en charger quand tu vas faire un delete sur la racine par exemple. Si tu as déjà fait un delete avant sur un noeud, il y aura un pointeur invalide quelque part dans l'arborescence XML et ça va planter quand la librairie voudra effacer le tout.
Sans compter que peut être, la librairie a implémenté un allocateur à elle.
Enfin tout ça c'est des suppositions, faut regarder ce que raconte la doc à ce niveau et éventuellement un peu de ton code. Mais au pif, je dirais volontiers qu'il est normal de ne pas invoquer delete dans ce cas, et ceci sans avoir de fuites mémoire pour autant :)