Liste chainées de chaine de charactères.
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:
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:
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:
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 !