Arbre binaire problème de segmentation
Fermé
mikhail105
Messages postés
4
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 décembre 2013
-
8 nov. 2013 à 10:21
mikhail105 Messages postés 4 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 8 décembre 2013 - 10 nov. 2013 à 12:07
mikhail105 Messages postés 4 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 8 décembre 2013 - 10 nov. 2013 à 12:07
A voir également:
- Arbre binaire problème de segmentation
- Codage binaire - Guide
- Zsh: segmentation fault - Forum Programmation
- Réponse binaire - Forum Bases de données
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Erreur de segmentation (core dumped) ✓ - Forum C
2 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
8 nov. 2013 à 23:34
8 nov. 2013 à 23:34
Aaah la magie des pointeurs ;)
Parfois ça porte à confusion... Tu as compris qu'il fallait utiliser des pointeurs dans ce cas de structure récursive, c'est déjà bien.
Mais le problème réside dans la fonction
Parfois ça porte à confusion... Tu as compris qu'il fallait utiliser des pointeurs dans ce cas de structure récursive, c'est déjà bien.
Mais le problème réside dans la fonction
inserer_element: tu créé un nouvel arbre si celui pointé est inexistant (NULL). Jusque là ça va, mais tu l'associes à
a1qui est un pointeur de noeud (type
arbre), or ce pointeur est copié vu qu'il est un paramètre de la fonction.
a1ne sortira pas de ce cadre, or tu veux l'associer au neud pointé; il faut donc des pointeurs de pointeurs, pour pointer l'
arbre, qui est lui-même un pointeur de noeud. C'est complexe mais après réflexion c'est logique; il m'a quand même fallu cogiter un peu pour trouver ça. Je te fais cadeau de la version pointe-pointeur de ta fonction:
void inserer_element(int e, arbre *a1)Du coup le
{
if (*a1==NULL)
{
*a1 = creer_arbre(e);
}
else if (e < ((*a1)->val))
{
inserer_element(e,&((*a1)->fils_g));
}
else
{
inserer_element(e,&((*a1)->fils_d));
}
}
maindevient en partie ça:
inserer_element(2,&temp);
inserer_element(3,&temp);
inserer_element(5,&temp);
mikhail105
Messages postés
4
Date d'inscription
vendredi 8 novembre 2013
Statut
Membre
Dernière intervention
8 décembre 2013
10 nov. 2013 à 12:07
10 nov. 2013 à 12:07
Je vous remercie :) Je vais remplacer ce code dans mon algorithme.
Merci encore une fois :)
Merci encore une fois :)