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 :EDIT : Problème de l'autoaffectation résolu en retournant une référence (operateur =)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 du constructeur par recopie résolu en mettant la taille de départ à 0
Partager