Bonsoir, j'ai realise un petit code de rappel avec les listes chainnees, et il y a un detail que je ne comprends pas (voir les commentaires sur le code)


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
void            aff_list(t_data *list)
{
  while (list != NULL)
    {
      my_putchar((list->c));
      list = list->next;
    }
}
 
void            delete_data(t_data **list)
{
  t_data        *epur;
 
  while (*list != NULL)
    {
      epur = *list;
      *list = (*list)->next;
      free(epur);
    }
}
 
void            readd_data(t_data *list)
{
  t_data        *readd;
 
  readd = malloc(sizeof(*readd));
  readd->c = 'Z';
  readd->next = NULL;
  if (list == NULL)
    list = readd;
  else
    list->next = readd;
}
 
void            add_data(t_data *list)
{
 
 t_data        *add;
 
  add = malloc(sizeof(*add));
  add->c = 'A';
  add->next = NULL;
  if (list == NULL)
    list = add;
  else
    list->next = add;
}
 
int             main(int ac, char **av)
{
  t_data        *list;
 
  list = NULL;
  list = malloc(sizeof(*list));  /*pourquoi cette ligne n'est pas utile ? Le malloc se fait grace a t_data *add ?*/
  add_data(list); /*Pourquoi si je n'envoie pas l'adresse (&list) ca ne fonctionnera pas (le 'A' ne s'ajoute pas), alors que je fais exactement la mm chose en dessous et ca fontionne (le 'Z' s'ajoute)*/
  readd_data(list);
  aff_list(list);
  delete_data(&list);
  aff_list(list);
  return (0);
}
Merci bien ! Bonne soiree