Au moment de la destruction de mes listes, le programme me fait une ptite bouclme infinie , comprends pas pourquoi : sur papier ca marche ...

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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
template <class T>
maillon<T>* maillon<T> :: gonext()
{
 
   return suivant;
 
}
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
 
// 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 : 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
 
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 ...