bonjour,

J'ai un soucis lorsque je dois ajouter un element à une liste un peu complexe. Voici mes structures :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
struct reader_send_list{
	struct shm_data *data;				/**< pointer to the first shm_data of the current list */
	struct reader_send_list *next;		/**< pointer to the next list */
};
 
struct reader_printhead{
	uint8_t ph_id;
	struct reader_send_list *next_frame;			/**< pointer to the next frame to send list */
	struct reader_printhead *next_printhead;		/**< pointer to the next printhead */
};
La structure printhead permet de chainer des éléments printhead comme elle mais contient un pointeur vers une structure reader_send_list. La structure reader_send_list est aussi une liste et je n'arrive pas à ajouter une élément à cette chaine au travers du pointeur vers la structure printhead.

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
 
extern void reader_append_send_list(struct reader_printhead *p_printhead)
{
	struct reader_send_list *p_new_send_list = malloc(sizeof *p_new_send_list);
 
	if((p_printhead->next_frame != NULL) && (p_new_send_list != NULL))
	{
		p_new_send_list->data = NULL;
		p_new_send_list->next = NULL;
 
		struct reader_send_list *current_list = p_printhead->next_frame;
		while(current_list != NULL)
		{
			printf("current_list=%p\n",current_list);
			current_list = current_list->next;
		}
		printf(" NULL = current_list=%p\n",current_list);
		current_list = p_new_send_list;
		printf("current_list=%p\n",current_list);
	}
}
et lorsque j'appelle ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
printf("t_ph[0]->next_frame->next = %p\n",t_ph[0]->next_frame->next);
	reader_append_send_list(t_ph[0]);
	printf("t_ph[0]->next_frame->next = %p\n",t_ph[0]->next_frame->next);
Je précise que lors de l'initialisation de la structure printhead, le pointeur next_frame ne pointe pas vers null mais est attaché a une struct reader_send_list. mais je ne comprend pas mon erreur.

merci de votre aide