IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur ds destructeur ds liste chainee


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut 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 : 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 ...

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je n'ai pas vraiment regardé le détail de ton destructeur (tu devrais tracer son execution avec un debugger, ce sera bien plus efficace), mais que dis-tu de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <class T>
    liste<T> :: ~liste()
    {
        while (tete)
            supprime_tete();
    }
    Si tes fonctions sont correctes, ceci le sera aussi.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    Mais c genial , ca marche merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Destructeur de liste chainee
    Par Treuze dans le forum C++
    Réponses: 5
    Dernier message: 12/04/2006, 00h40
  2. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49
  3. [LG]liste chainee + pointeur + affichage
    Par k_ro dans le forum Langage
    Réponses: 6
    Dernier message: 17/01/2004, 13h58
  4. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  5. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo