Bonsoir.
J'ai un petit souci lors de la libération de pointeurs, le programme a un comportement différent sous Builder C++ (Windows) et sous Kdevelop (Linux).
J'ai une classe ce qu'il y a de plus simple, mais qui contient un pointeur à l'interieur.
Dans le constructeur, on fait un new Int sur le pointeur;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Essai{ private: int *pt; public: Essai(); ~Essai(); void setPt ( int theValue ){*pt = theValue;} int getPt() const {return *pt;} };
Dans le destructeur, on fait un delete pt
Dans mon main, je crée dynamiquement deux pointeurs, mais j'envoie le contenu du premier dans le deuxième:
Les deux objets ont donc maintenant un pointeur (pt) qui pointe vers la même zone mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Essai *essai1 = new Essai(); Essai *essai2 = new Essai(); *essai2 = *essai1;
Si je fait essai1->setPt(5); alors *pt de essai2 aura aussi 5.
Jusque là on est d'accord.
Mais si maintenant je fait un delete essai1, la zone mémoire est normalement libéré non?
Pourtant sous KDevelop si je fait juste après un essai2->setPt(3); , aucun problème, et dans le debugger on voit la zone mémoire de pt recevoir 3 aussi bien sur essai2 que sur feu essai1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 essai1->setPt(5); delete essai1; essai2->setPt(3); //ne devrait pas marcher
A savoir que sur Builder C++ celui-ci n'accepte pas l'affectation et sort un joli message d'erreur.
Alors, est-ce un comportement propre à Linux, ou bien ça plante mais sans que je le sache?
Si quelqu'un à une réponse à cela, merci d'avance.
Partager