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

Langage C++ Discussion :

Arbre binaire de recherche - insertion - segmentation fault


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 8
    Par défaut Arbre binaire de recherche - insertion - segmentation fault
    Bonjour,

    Je travaille actuellement sur les arbres binaires de recherche mais malheureusement après compilation on m'affiche segmentation fault . Je ne connais pas l'origine de l'erreur mais c'est probablement du à ma fonction insertion qui n'insère aucune valeur:


    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
    void abr::inserer(int y)
    {
        if(racine==NULL)
        {
              racine->cle=y;
        }
     
        else
        {
            inserer(y,racine);
        }
    }
     
    void abr::inserer(int y, noeud * p)
    {
     
        if(p!=NULL)
        {
            if(y < p->cle && p->fg!=NULL)
            inserer(y,p->fg);
     
            if(y > p->cle && p->fd!=NULL)
            inserer(y,p->fd);
        }
     
     
     
        if(y > p->cle)
        {
            if(p->fg!=NULL)
            {
                noeud * tmp = new noeud;
                tmp->fg=p->fg;
                tmp->cle=y;
                tmp->fd=NULL;
            }
     
            else
            {
                p->fg->cle=y;
            }
        }
     
        if(y<p->cle)
        {
            if(p->fd!=NULL)
            {
                noeud * tmp = new noeud;
                tmp->fd=p->fd;
                tmp->cle=y;
                tmp->fg=NULL;
            }
     
            else
            {
                p->fd->cle=y;
            }
     
        }
    }



    voici mon constructeur et mon destructeur de mon arbre binaire de recherche:


    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
     
    //constructeur
    abr::abr()
    {
        racine=NULL;
    }
     
    //destructeur utilisant la fonction récursive suppression
    abr::~abr()
    {
        if(racine!=NULL)
        suppression(racine);
    }
     
    //fonction récursive suppression
    void abr::suppression(noeud *p)
    {
        if(p==NULL) return;
        if(p->fg!=NULL)
            suppression(p->fg);
            p->fg=NULL;
        if(p->fd!=NULL)
            suppression(p->fd);
            p->fd=NULL;
        delete p;
    }


    Je vous remercie pour toute éventuelle aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 89
    Par défaut
    Sans tout lire, mais juste une très brève lecture,

    ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(racine==NULL)
        {
              racine->cle=y;
        }
    Bah ça va segfault... Te faut initialiser ta racine avant

  3. #3
    Membre actif Avatar de Sytten
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 72
    Par défaut
    Je ne suis pas pro, mais il me semble qu'il y a certains problèmes de conception.

    Premier problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(racine==NULL)
        {
              racine->cle=y;
        }
    Si le pointeur ne pointe sur rien, alors on l'utilise pour récuperer une valeur! Segfault assuré...
    Si tu change pour
    ça règle un problème

    Deuxième problème:
    (ligne 28 et 44)
    Dans cette fonction tu n'as JAMAIS testé pour voir si le pointeur était NULL avant de l'utiliser pour aller chercher une valeur. Il a donc des chances fortes d'avoir un Segfault...

    Pour l'instant c'est ce que je vois. Il faut faire attention aussi aux boucles infinies...

    Bonne chance
    Sytten

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/12/2009, 11h43
  2. Suppression dans un arbre binaire de recherche
    Par zeine77 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 20h40
  3. Réponses: 3
    Dernier message: 31/12/2005, 12h30
  4. Réponses: 11
    Dernier message: 07/04/2004, 13h06
  5. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45

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