cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 2010
-
19 mai 2006 à 11:29
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 2010
-
19 mai 2006 à 13:11
Bonjour;
L'extrait de code suivant(simplifié bien sûr) me cause problème :
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 19 mai 2006 à 13:05
Oui, c'est normal, l'opérateur = effectue une copie membre à membre, a la première ligne
T a, b;
tu créer 2 objets de type T avec chacun un pointeur sur un tableau de 10 éléments que tu a alloué dans le constructeur.
Mais ensuite quand tu faits a=b, dans ton objet a tu perde le pointeur vers le tableau alloué à la construction de a puisque maintenant tu as dans a un poiteur vers le tableau de b (puisque égal fait une copie membre à membre).
A la fin du main delete[] est donc appelé deux fois sur le même pointeur et le tableau initiale de l'objet à n'est pas détruit car tu a perdu le pointeur sur celui-ci.
Solution: surcharger l'opérateur = pour que les éléments du tableau soient copié de b vers a est non les pointeurs.
Bonne chance, n'hésites pas à demander précisions si t'as un blem.
Bouba
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 19 mai 2006 à 12:26
&n est une adresse sur la pile, c'est donc normal que le delete échoue
En fait, n est une copie de l'objet créé sur le tas, tu ne peux donc pas lui appliquer delete
cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 19 mai 2006 à 12:27
Class1 n=*(new Class1); // Ici tu déréférences, tu récupères "la valeur", l'opérateur = réalise donc une copie membre à membre mais tu perds la référence au pointeur retourné par new !!!
delete &n; // Ici en fait cette instruction demande la désallocation de n, mais n n'est pas alloué dynamiquement, en sortant du main le prog essaira de désallouer une fois de plus n, en tout cas ce n'est nullement l'objet "new Class1" qui est pointé par &n !!!
Good Luck.
Bouba
Vous n’avez pas trouvé la réponse que vous recherchez ?