Flux rss
Rechercher : dans
Par :

Probleme de segmentation sur arbre binaire.

wlued, le lundi 10 octobre 2005 à 20:48:27 
 Signaler ce message aux modérateurs

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é.

2

kilian, le lundi 10 octobre 2005 à 21:11:05

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:

if (n==NULL)
{	
		feuille=malloc(sizeof(noeud)); // A rajouter
		feuille->x=x;
		feuille->gauche=NULL;
		feuille->droite=NULL;
}

Répondre à kilian

wlued, le lundi 10 octobre 2005 à 21:44:53

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.

Répondre à wlued

3

kilian, le lundi 10 octobre 2005 à 21:49:13

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?

Répondre à kilian

4

wlued, le mardi 11 octobre 2005 à 00:14:40

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>.

Répondre à wlued

5

leroy, le mardi 11 octobre 2005 à 01:09:11

Fais gaffe à la syntaxe! malloc et pas maloc!
epi fait un transtypage bien comme il faut:

feuille=(noeud*)malloc(sizeof(noeud))

@+

Répondre à leroy

6

kilian, le mardi 11 octobre 2005 à 06:54:48

Ah ben oui, maloc...

Répondre à kilian

7

wlued, le mardi 11 octobre 2005 à 08:40:16

Erf oui effectivement....
Bon l'erreur est réparée et je peux à nouveau compiler mais je récupère également mon segmentation fault.

Répondre à wlued

8

 wlued, le mardi 11 octobre 2005 à 10:53:37

Ok le pb est réglé, j'avais 'déplacé ' l'erreur en supprimant le malloc dans mon main. Le pointeur sur structure est alloué dans la fonction mais plus dans le main. Merci à vous.

Répondre à wlued
[C++] implémention d'un arbre binaire (Résolu) Bonjour tout le monde Pourriez vous m'aidez à implémenter un arbre binaire en C++ svp. Merci d'avance. A bientot. www.commentcamarche.net/forum/affich-2616848-c-implemention-d-un-arbre-binaire
Creation d'un arbre binaire de recherche Bonjour, svp je voudrai demandé votre aide pour un tp qui demande d'ecrire un programme pour creer un arbre binaire de recherche(recursivement)merci www.commentcamarche.net/forum/affich-11704291-creation-d-un-arbre-binaire-de-recherche
Arbre binaire de recherche(langage C) bsr, qui peut m'aider je veux implementer un arbre binaire de recherche par tableau mais j'arrive pas www.commentcamarche.net/forum/affich-6091294-arbre-binaire-de-recherche-langage-c
[Langage C] C/C++ Erreur de segmentationQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux... www.commentcamarche.net/faq/sujet-4791-langage-c-c-c-erreur-de-segmentation
Parser un fichier binaire en PHPSupposons que vous ayez enregistré des données binaires dans un fichier, c'est-à-dire un enregistrement brut qui n'est pas traduit en texte. C'est une chose que l'on fait couramment avec certains langages de bas niveau comme le C ou le... www.commentcamarche.net/faq/sujet-13092-parser-un-fichier-binaire-en-php
Calcul et arbre binaire en CBonjour a tous, voila je cherche a faire une mini calculatrice mai je ne vois pas comment faire un arbre binaire en C, je voudrai en faite prendre en compte les parentheses. voila un calcul que je voudrais faire, ((5 + 3) * 2 + 6). je vous remercie... www.commentcamarche.net/forum/affich-3846654-calcul-et-arbre-binaire-en-c
Algo d parcours d'un arbre binaireje souhait avoir l'algorithme du parcours d'un arbre binaire... je le cherche depuit lontemps ...j'ai toujours pas de répense... www.commentcamarche.net/forum/affich-11030-algo-d-parcours-d-un-arbre-binaire
Langage c arbre binaire de recherche(tableau)Bonjour, je peu savoir comment implémenter un arbre binaire de recherche par tableau ?? svp est ce qu'il ya qqun qui peu m'expliquer comment l'implémenter ou me filer un cours qui explique cela svp c'est urgent!!!! merci d'avance www.commentcamarche.net/forum/affich-6147118-langage-c-arbre-binaire-de-recherche-tableau
Le codage binairePrésentation du binaire Bit Poids des bits Conversions Octet KiloOctets, MégaOctets Opérations en binaire Addition binaire Multiplication binaire Présentation du binaire Vers la fin des années 30, Claude Shannon démontra qu'à l'aide... www.commentcamarche.net/contents/base/binaire.php3
Segmentation de la mémoire en assembleurQu'est-ce que la segmentation de la mémoire ? En assembleur, on appelle segment de mémoire le mécanisme de base de la gestion des adresses pour des processeurs de type 80x86. Les instructions sont stockées dans le registre IP. Il s'agit d'adresses... www.commentcamarche.net/contents/asm/segmentation.php3