Bonjour,

Je me suis décidé a aprofondir mes "connaissance" en C et donc je passe par les listes chainées et les structures de données.
Jusqu'a présent j'arrive à remplir une liste d'entier et les afficher.
J'ai donc voulu remplir une liste de mots et les afficher, la partie pour remplir une liste est opérationel, je pêche sur la partie affichage de la liste.
J'ai le tristement célèbre "Segmentation Fault".
C'est surrement une histoir de malloc, mais je ne sais pas ou le placer, j'ai essayer plusieurs solutions, malheureusement sans succès.
Merci a ceux qui prendrons le temps de me lire et de m'aider !

Le main.c
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
int                     main(int argc, char **argv)
{
  struct termios        t;
  struct dlist          *word;
  int                   i;
 
  word = malloc(sizeof(struct dlist *));
  i = 2;
  tgetent(0, "xterm");
  raw_mode(&t);
  if (argc == 1)
    my_printf("error : please enter more arguments\n");
  else
    {
      if (word != NULL)
        {
          word->length = 0;
          word->p_head = NULL;
          word->p_tail = NULL;
        }
      dlist_add_first(word, my_get_nbr(argv[1]));
      while(i < argc)
        {
          dlist_add_last(word, my_get_nbr(argv[i]));
          i = i + 1;
        }
    }
  dlist_display(word);
  while (42);
  return (0);
}
Les fonctions pour remplire les listes et l'afficher.
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
63
dlist           *dlist_add_last(struct dlist *p_list, char *data)
{
  struct node   *p_new;
 
  p_new = malloc(sizeof(struct node *));
  if (p_new != NULL)
    {
      p_new->data = data;
      p_new->p_next = NULL;
      if (p_list->p_tail == NULL)
        {
          p_new->p_prev = NULL;
          p_list->p_head = p_new;
          p_list->p_tail = p_new;
        }
      else
        {
          p_list->p_tail->p_next = p_new;
          p_new->p_prev = p_list->p_tail;
          p_list->p_tail = p_new;
        }
      p_list->length++;
    }
  return (p_list);
}
 
dlist           *dlist_add_first(struct dlist *p_list, char *data)
{
  struct node   *p_new;
 
  p_new = malloc(sizeof(struct node *));
  if (p_new != NULL)
    {
      p_new->data = data;
      p_new->p_prev = NULL;
      if (p_list->p_tail == NULL)
        {
          p_new->p_next = NULL;
          p_list->p_head = p_new;
          p_list->p_tail = p_new;
        }
      else
        {
          p_list->p_head->p_prev = p_new;
          p_new->p_next = p_list->p_head;
          p_list->p_head = p_new;
        }
      p_list->length++;
    }
  return (p_list);
}
 
void            dlist_display(struct dlist *p_list)
{
  struct node   *p_temp;
 
  p_temp = p_list->p_head;
  while (p_temp != NULL)
    {
      my_printf("%s ", p_temp->data);
      p_temp = p_temp->p_next;
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct  node
{
  char          *data;
  struct node   *p_next;
  struct node   *p_prev;
}node;
 
typedef struct dlist
{
  size_t        length;
  struct node   *p_tail;
  struct node   *p_head;
}dlist;
Encor merci pour votre aide et votre temps !