Bonjour à tous,
Bonne année 2010 !!
J'ai un drôle de problème qui me pertube beaucoup, si vous pouviez m'aider j'en serais ravi !
L'idée générale : mettre des chaines de caractères dans une liste chaînée. Pour chaque élément de la liste, je copie une chaine de caractère en plusieurs morceaux dedans. Puis j'incrémente un compteur pour avoir le nombre total d'éléments dans ma liste. Sauf que l'incrémentation de ce compteur déplace le pointeur sur la chaine de caractère qui se trouve dans le premier élément de la liste !
Quelques détails :
- une structure de type sl_i contient un pointeur sur le début de la liste, un autre sur la fin de la liste, et le fameux compteur.
- la liste chaînée est composée d'une structure de type s_node nommée new. Elle est remplie dans la fonction lb_fill_node, où tout se passe très bien.
Mon problème :
- avant la ligne "i_sl->len = i_sl->len + 1", tout va très bien. Quand je tape sous gdb "p i_sl->bg->name", j'obtiens bien "REMOTEHOST".
- après cette ligne, "p i_sl->bg->name" donne "EMOTEHOST".
- quand j'insère d'autres éléments (avec une fonction construite sur le même modèle), j'obtiens "MOTEHOST", et ainsi de suite, jusqu'à avoir une chaîne vide.
Voici le code :
Mes deux structures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 sl_i *ins_first_elem(sl_i *i_sl, char *environ) { s_node *new; new = xmalloc(sizeof(s_node), "ins_first_elem"); new = lb_fill_node(environ, new); new->next = NULL; i_sl->bg = new; i_sl->end = new; i_sl->len = i_sl->len + 1; return (i_sl); }
En vous remerciant,
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 typedef struct s_node { char *name; int len1; char *arg; int len2; struct s_node *next; } s_node; typedef struct sl_i { s_node *bg; s_node *end; int len; } sl_i;
Nathan
Partager