Bonjour,
J'ai un projet a rendre pour dans...bientot et j'ai toujours un probleme avec mon programme...
En effet, lors de ma premiere insertion, il y a un bug qui n'insere rien dans le premier element, donc rien dans les suivants bug avec memoire x232 ne peut pas etre written dans 0x00 ou un truc du genre...pourquoi? et comment y remédier?
Une précision, ce programme devra tourner sous linux et je ne peux pas modifier mes typedef et mes parametre (donc je ne peux pas faire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part inserer(Liste*, int)
Je vous remercie d'avance pour le temps que vous prenez a étudier mon probleme.
P.S : je sais qu'il y a plein de tutoriaux, faqs etc...mais pour le moment je n'ai pas trouvé la solution.
Voici ce que j'ai en gros :
main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct noeud * Noeud; typedef struct noeud { int n; Noeud suivant; } * Liste;
inserer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Liste l = NULL; test = inserer(l, val);
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 int inserer(Liste l, int x) { int test = 0; Liste lBis = (Liste) malloc (sizeof(struct noeud)); Liste l2 = (Liste) malloc (sizeof(struct noeud)); if(l == NULL)//si la chaine est vide { l = (Liste) malloc (sizeof(struct noeud)); (*l).n = x;//on met la valeur au noeud (*l).suivant = NULL;//on indique que le suivant est null test = 1; } else { lBis = l; while(test == 0)//si la chaine (1er noeud n'est pas null) a été créée { if((*lBis).suivant == NULL)//s'il n'y a pas de valeur apres celui de l'insertion { (*l2).n = x;//on peut alors ajouter la valeur demandé (*l2).suivant = NULL;//le suivant est donc null (*lBis).suivant = l2;//on met le lien entre l'avant dernier et le dernier test = 1; } else lBis = (*lBis).suivant; } } free(lBis); free(l2); return test; }
Partager