Erreur ds destructeur ds liste chainee
Au moment de la destruction de mes listes, le programme me fait une ptite bouclme infinie , comprends pas pourquoi : sur papier ca marche ...
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
|
template <class T>
liste<T> :: ~liste()
{
if ((tete != NULL) && ((*tete).gonext() != NULL))
{
maillon<T>* parcours;
maillon<T>* apresparcours;
apresparcours = (*tete).gonext();
parcours = tete;
while ( (*apresparcours).gonext() != NULL );
{
cout << (*parcours).valeur() << endl ;
delete parcours;
parcours = apresparcours;
apresparcours = (*apresparcours).gonext();
}
delete parcours;
}
delete fin;
fin = NULL;
tete = NULL;
} |
Code:
1 2 3 4 5 6 7 8
|
template <class T>
maillon<T>* maillon<T> :: gonext()
{
return suivant;
} |
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
|
// Classe maillon
template <class T> class maillon {
// Champs prives
private:
T data ;
maillon<T> *suivant ;
// Forme canonique de Coplien
public:
maillon();
maillon(const maillon<T>&) ;
maillon(const T);
~maillon() ;
maillon<T>& operator=(const maillon<T>&) ;
maillon<T>& operator=(const T);
// Autres methodes et operateurs
maillon<T>* gonext();
maillon<T>& modifvaleur(const T);
maillon<T>& modifpointeur(maillon<T>&);
maillon<T>& pointeurnull();
T valeur() const;
void affichemaillon();
}; |
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
|
template <class T> class liste {
// Champs prives
private:
maillon<T>* tete;
maillon<T>* fin ;
// Forme canonique de Coplien
public:
liste() ;
liste(const liste<T>&) ;
~liste() ;
liste<T>& operator=(const liste<T>&) ;
// Ajout de maillons
liste<T>& operator+ (const T) ;
liste<T>& operator+ (const maillon<T>&) ;
liste<T>& operator+ (const liste<T>&) ;
// Suppression de maillons
liste<T>& operator- (const T) ; // suppression de la premiere occurence de T
liste<T>& operator- (int) ; // suppression du maillon d'indice donne
void supprime_tete() ; // supprime la tete de la liste
// Entrees-sorties
void affiche () const ; // Fonction constante qui ne peut pas modifier les champs de la classe
// Autres methodes et operateurs
int longueur();
}; |
Il n y a rien ds le destructeur de maillon
Voila , je sais plus quoi faire avec ca ...