Bonjour,
j'avais un problème de fuites de mémoire dans un programme de calcul symbolique qui représente les fonctions sous forme d'arbre binaire.
Typiquement des que je mettais un destructeurs classique qui tue les fils, ça me donnait des segfaults de partout.
Les segfaults se produisent lors de la destruction d'un nœud ayant des successeurs.
J'ai donc décidé d'essayer de remplacer mes pointeurs par des auto_ptr, qui je crois sont censés aider dans la gestion des destructions des objets dynamiques.
Et là étrange problème, mes constructeurs ne marchent plus,par exemple pour créer une fonction constante, j'ai la classe number, si dans un programme j'écris
le compilateur me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 number One=number(1);
Alors d'une part c'est étrange car je n'ai aucune idée de la manière dont mon code s'est mis à considérer les doubles comme des "numbers", et sont deuxième candidat n'est autre que la ligne de déclaration de la classe number
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 erreur, no matching function to call number:number(number). les candidats sont: number.h(l56) number:number(double) number.h(l41) number:number(number&)
En fichier joint, il y a les deux versions de mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class number : public noeud { ....
src_std_ptr.tar.bz2 est la version qui compile, tourne, mais a d'énormes fuites (et dans laquelle je n'arrive pas à définir de destructeur)
src_std_auto_ptr.tar.bz2 est la version avec des auto_ptr, qui confond les doubles et les objets de mes classes.
Si quelqu'un sait d'où vient l'un ou l'autre des problèmes, je suis preneur, car c'est assez frustrant d'avoir un code dans lequel on n'arrive pas à mettre les destructeurs dans le premiers cas, et dans le deuxième qu'on n'arrive pas à tester.
Merci bien.
--
Z.
Partager