Probleme de segmentation sur arbre binaire.
Résolu
wlued
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
wlued Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
wlued Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
typedef struct noeud
{
int x;
struct noeud *gauche;
struct noeud *droite;
} noeud;
noeud *inserer(noeud *n,int x)
{
noeud * feuille;
if (n==NULL)
{
feuille->x=x;
feuille->gauche=NULL;
feuille->droite=NULL;
}
else {
if (x>n->x)
{
feuille= inserer(n->droite,x);
}
else {
if (x<n->x)
{
feuille= inserer(n->gauche,x);
}
else {
if ((existe(n,x))==1)
{
feuille= n;
}
}
}
}
return feuille;
}
...
}
int main(int argc, char **argv)
{
struct noeud *n;
n=malloc(sizeof(noeud));
inserer(n,8);
afficroi(n);
affidec(n);
return EXIT_SUCCESS;
}
Bonjour à tous,
Voila un algorithme que j'ai un peu raccourci pour cibler mon probleme sur la fonction en cause : inserer( ).
J'ai une fonction existe( ) qui me renvoi un 1 si la fonction trouve la valeur dans l'arbre, et deux fonctions d'affichage.
J'ai donc un probleme de segmentation sur l'algo ci dessus (compilation ok). Il me semble juste et j'ai tenté un malloc pour palier au pb de mémoire mais ça n'a rien changé.
Le pointeur part sur une zone non autorisée donc mais je ne vois pas où.
ps : la mise en page n'a pas été prise en compte, désolé pour la lisibilité.
{
int x;
struct noeud *gauche;
struct noeud *droite;
} noeud;
noeud *inserer(noeud *n,int x)
{
noeud * feuille;
if (n==NULL)
{
feuille->x=x;
feuille->gauche=NULL;
feuille->droite=NULL;
}
else {
if (x>n->x)
{
feuille= inserer(n->droite,x);
}
else {
if (x<n->x)
{
feuille= inserer(n->gauche,x);
}
else {
if ((existe(n,x))==1)
{
feuille= n;
}
}
}
}
return feuille;
}
...
}
int main(int argc, char **argv)
{
struct noeud *n;
n=malloc(sizeof(noeud));
inserer(n,8);
afficroi(n);
affidec(n);
return EXIT_SUCCESS;
}
Bonjour à tous,
Voila un algorithme que j'ai un peu raccourci pour cibler mon probleme sur la fonction en cause : inserer( ).
J'ai une fonction existe( ) qui me renvoi un 1 si la fonction trouve la valeur dans l'arbre, et deux fonctions d'affichage.
J'ai donc un probleme de segmentation sur l'algo ci dessus (compilation ok). Il me semble juste et j'ai tenté un malloc pour palier au pb de mémoire mais ça n'a rien changé.
Le pointeur part sur une zone non autorisée donc mais je ne vois pas où.
ps : la mise en page n'a pas été prise en compte, désolé pour la lisibilité.
A voir également:
- Glandier arbre
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Arbre de décision ✓ - Forum Excel
- [Arbre de défaillance] - Forum Logiciels
- Dessin animé arbre qui parle ✓ - Forum Cinéma / Télé
- Mon arbre a clochette n a pas de clo. - Forum Jeux vidéo
6 réponses
Quand tu appeles une fois la fonction insérer, 8 est plus grand que 0 (chez moi la valeur par défaut d'un x dans un noeud fraichement alloué).
Donc premier appel de insérer() avec x=8, il va rappeler insérer sur feuille->droite pour y insérer 8.
Donc deuxième appel de inserer(), ici n==NULL (puisque tu n'a pas alloué de place pour feuille->droite précédemment).
Donc le "feuille->x=x;" provoque une erreur de segmentation, puisque la place n'a pas été allouée pour ce pointeur de noeud.
Donc juste une petite correction:
Donc premier appel de insérer() avec x=8, il va rappeler insérer sur feuille->droite pour y insérer 8.
Donc deuxième appel de inserer(), ici n==NULL (puisque tu n'a pas alloué de place pour feuille->droite précédemment).
Donc le "feuille->x=x;" provoque une erreur de segmentation, puisque la place n'a pas été allouée pour ce pointeur de noeud.
Donc juste une petite correction:
if (n==NULL) { feuille=malloc(sizeof(noeud)); // A rajouter feuille->x=x; feuille->gauche=NULL; feuille->droite=NULL; }
J'ai fait la modif et lors de la compilation j'ai implicit declaration of function.
Le pb est p-e basique mais je ne maitrise pas encore trés bien.
Le pb est p-e basique mais je ne maitrise pas encore trés bien.
Ah...
Tu pourrais me donner l'erreur complète?
Ou au pire, me citer le contenu de la ligne à laquelle se rapporte l'erreur? (si c'est un bout de code que tu n'as pas encore cité, mets tout ton code ici).
Tu as bien inclu <stdlib.h> pour le malloc?
Tu pourrais me donner l'erreur complète?
Ou au pire, me citer le contenu de la ligne à laquelle se rapporte l'erreur? (si c'est un bout de code que tu n'as pas encore cité, mets tout ton code ici).
Tu as bien inclu <stdlib.h> pour le malloc?
Le message exact est 'warning : implicit declaration of function 'maloc'.
Il porte sur la section suivante :
if (n==NULL)
{
feuille=maloc(sizeof(noeud));
feuille->x=x;
feuille->gauche=NULL;
feuille->droite=NULL;
}
En fait je n'ai fait que rajouter cette ligne au programme cité plus haut.
J'ai bien inclu le <stdlib.h>.
Il porte sur la section suivante :
if (n==NULL)
{
feuille=maloc(sizeof(noeud));
feuille->x=x;
feuille->gauche=NULL;
feuille->droite=NULL;
}
En fait je n'ai fait que rajouter cette ligne au programme cité plus haut.
J'ai bien inclu le <stdlib.h>.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question