Bonjour,
j'ai un problème de destruction de cellule d'une liste chainée :
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;
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.
voila en gros l'architechture du programme :
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;
}
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).
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...