Libération de mémoire non réservée (operator=)
Bonjour,
J'ai des soucis de libération de mémoire dans une de mes classes. C'est une liste circulaire avec sentinelle. La classe représentant les chaînons a été implémentée par un prof.
Voici quelques données concernant la classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/**
* Type des noeuds
*/
typedef DataStructure::CyclicNode<double> noeudReel;
/**
* Taille
*/
unsigned int _size;
/**
* Pointeur sur la sentinelle
*/
noeudReel* sentinelle;
/**
* Constructeur d'une liste vide
*/
liste::liste() : _size(0)
{
sentinelle = new liste::noeudReel();
}
/**
* Constructeur par recopie
*/
liste::liste(const liste& l) : _size(0)
{
sentinelle = new liste::noeudReel();
add(*this, l);
}
/**
* Destructeur
*/
liste::~liste()
{
while(!empty())
{
_size--;
delete sentinelle->previous();
}
delete sentinelle;
}
/**
* Opérateur d'affectation
* @param l1 Référence vers la liste à affecter
* @return Référence vers la liste affectée
*/
liste& liste::operator=(const liste& l)
{
if(this != &l)
{
while(!empty())
{
_size--;
delete sentinelle->previous();
}
add(*this, l);
}
return *this;
}
/**
* Ajout des valeurs d'une liste à la fin d'une autre
* @param l1 Liste à modifier
* @param l2 Liste à recopier
*/
void add(liste& l1, const liste& l2)
{
liste::iterator::iterator fin = l2.end();
liste::iterator::iterator i = l2.begin();
while(i != fin)
{
sentinelle->insertBefore(new liste::noeudReel(*i));
_size++;
++i;
}
} |
EDIT : Problème de l'autoaffectation résolu en retournant une référence (operateur =)...
EDIT : Problème du constructeur par recopie résolu en mettant la taille de départ à 0