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
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 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); }
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; } }Encor merci pour votre aide et votre temps !
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;
Partager