Bonjour,
j'ai un problème de destruction de cellule d'une liste chainée :
je crée dans mon main un tabelau de listes : List *L= New List[4], puis je veux qu'elle soit modifié par une fonction f qui rajoute une cellule à la liste et dans cette fonction j'utilise d'autres fonction qui utilise cette liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct cell_s{ int i; char* c; struct cell_s *next; }cell; typedef cell *List;
voila en gros l'architechture du programme :
Les allocations mémoires sont bonnes, le problème est que lorsque je quitte la fonction f2 la valeur de L->i devient 0 alors que L->c reste correcte (alors qu'avant et dans la fonction f2, elles sont ttes les deux correctes).
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 int f2(...,List L){ ... //L n'est pas modifiée L est correcte return entier; } void f(List &L){ ... //ajout d'une cellule dans la liste L ... // pas de problèmes , L est correcte int val = f2(...,L); //problème L n'est pas bonne. ... } int main(){ List L; ... for (int j=0; j<10;i++) { for (int i=0; i<4;i++) { f(L[i]); } } return 1; }
de plus lorsque je sort de la fonction f, la première cellule de la liste L[i] qui a buggé prend les valeurs de L[i+1] pour i et c mais par contre conserve le pointeur vers la cellule suivante correctement...
bref je comprend pas trop ce qu'il se passe, est ce que le fait d'utiliser des &L et L ne provoque pas une destruction de cellule lorsque la fonction f2 se termine car juste avant le return tt est bon et apres la fonction f2 ca a bugger...
Partager