Réponse acceptée !
Bonjour.
Tout d'abord:
- Évite les "using namespace", voir:
[ Lien ]
- Met une majuscule au classe et un _ devant les attributs de classe (genre "int _x;")
- cmath ne te sert à rien ici.
- Évite de coder dans un header, directement dans ta classe.
yann_lo_san t'as déjà décrit l'origine du problème, je n'y reviendrais donc pas. Il est, de manière générale, dangereux de prendre l'adresse d'une valeur temporaire.
je me demande pourquoi ce problème se produit pour a.abscisse() et pas pour b.abscisse()..
Coup de chance, ça dépend de l'état de la mémoire à un instant t. Une valeur détruite ne l'est pas pour de vrai, elle est marquée comme étant réinscriptible. Si par chance aucun processus n'a réécrit par dessus, tu auras la bonne valeur (mais aucune garantie forte).
@yann_lo_san: Pas tout à fait d'accord avec deux choses (vraiment des petits détails, ton explication étant tout à fait correcte):
segment(const point& a, const point& b)
{
debut = new Point(a.abscisse(), a.ordonnee());
fin = new Point(b.abscisse(), b.ordonnee());
};
Dans ce cas, autant laisser "point a" en arguemnt et mettre comme attributs des "point" au lieu de "point*". La gestion est alors automatique pour un résultat similaire à ce que tu proposes.
~segment()
{
if(debut) delete debut;
if(fin) delete fin;
}
Les "if" ne servent à rien ici. "delete 0" est tout à fait valide et ne fait rien. delete est une fonction qui vérifie déjà si le pointeur est nul.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question