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.
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 constructeur, on fait un new Int sur le pointeur;
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Essai *essai1 = new Essai(); 
Essai *essai2 = new Essai();
 
*essai2 = *essai1;
Les deux objets ont donc maintenant un pointeur (pt) qui pointe vers la même zone mémoire.

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.