Partage
  • Partager sur Facebook
  • Partager sur Twitter

Suppresion listes chainées erreur

    8 janvier 2023 à 12:12:23

    Bonjour, étant étudiant je commence à bosser les liste chainées

    Je suis sur un projet et je dois créer une fonction pour supprimer toute une liste.

    J'ai réalisé une fonction qui me semble correct (apparemment non...) et je n'arrive pas à voir ou est l'erreur.

    Voici ma fonction :

    void deleteList(List * aList)
    {
    
        if(aList->size == 0)
        {
            cout << "Liste déjà vide" << endl;
        }
    
        else
        {
            Element *current = aList->first;
    
            while(current->next != nullptr)
            {
                Element *del = current;
                current = current->next;
                cout << del->value << " ";
                delete(del);
                cout << "Supprime !" << endl;
            }
        }
    
    }

    Et voici le résultat console qui finis par crash :

    Entrez une valeur : 1
    
    Entrez une valeur : 2
    
    Entrez une valeur : 3
    
    Entrez une valeur : 4
    
    Entrez une valeur : 5
    
    Entrez une valeur : 6
    
    Entrez une valeur : stop
    
    Cette liste contient 6 element(s) : 1 / 2 / 3 / 4 / 5 / 6
    1 Supprime !
    2 Supprime !
    3 Supprime !
    4 Supprime !
    5 Supprime !
    -1603659776 Press <RETURN> to close this window...



    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2023 à 13:46:17

      C'est plus du C que du C++.

      Il faudrait voir comment tu declares ta classe, mais il est possible que ton pointeur ne soit pas initialise a nullptr.

      Et :

      - verifie tes pointeurs avant utilisation. Tu utilise aList sans verifier si c'est valide.

      - n'ecris pas "delete(del)" mais "delete del"

      • Partager sur Facebook
      • Partager sur Twitter
        8 janvier 2023 à 15:33:01

        gbdivers a écrit:

        C'est plus du C que du C++.

        Il faudrait voir comment tu declares ta classe, mais il est possible que ton pointeur ne soit pas initialise a nullptr.

        Et :

        - verifie tes pointeurs avant utilisation. Tu utilise aList sans verifier si c'est valide.

        - n'ecris pas "delete(del)" mais "delete del"


        Pourtant c'est bien sur nullptr, et j'ai modifié le "delete(del)" et ça n'a rien changé...

        struct Element
        {
            int value = 0;
            Element * next = nullptr;
        };
        
        /*
         * Definition of a list
         */
        struct List
        {
            int size = 0;
            Element * first = nullptr;
        };



        • Partager sur Facebook
        • Partager sur Twitter
          8 janvier 2023 à 16:40:27

          Il faudrait montrer tout ton code, en particulier la partie initialisation.
          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2023 à 1:06:38

            Ta fonction deleteList() détruit tous les éléments qui ont un suivant. Donc ne détruit pas le dernier élément.

            Et pour savoir ce qu'il se passe ensuite, il nous faut plus de code...

            • Partager sur Facebook
            • Partager sur Twitter

            En recherche d'emploi.

              10 janvier 2023 à 1:36:17

              À première vue, ça ne crashe pas dans la fonction, mais au retour parce que tu ne mets pas à jour ton pointeur first et size.
              Et comme l'a dit Dalfab, le dernier n'est pas détruit.

              Si par exemple, tu essaies d'afficher ta liste "vide" au retour. tu vas te ramasser dans la nature ...

              -
              Edité par PierrotLeFou 10 janvier 2023 à 2:00:30

              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Suppresion listes chainées erreur

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown