Bonsoir,
Je suis en plein programmation, et je me surpris que je perd la tête de ma liste lorsque je la traite à l'intérieur d'une fonction du callback.
Comment pourrai-je retourner ma liste s'il vous plais;
Version imprimable
Bonsoir,
Je suis en plein programmation, et je me surpris que je perd la tête de ma liste lorsque je la traite à l'intérieur d'une fonction du callback.
Comment pourrai-je retourner ma liste s'il vous plais;
Bonjour,
ça va être compliqué de trouver où tu t'es trompé si tu ne fournis pas de code pour essayer de comprendre ce que tu as fait...
à mon avis c'est une liste GLib :mouarf:
Code:
1
2
3
4
5
6
7
8 void my_callback (void* data, void* user_data) { GList* list = (GList*)user_data; // reste du code ici; } ... GList* list = NULL; list = g_list_append (list, "data"); g_list_foreach (my_callback, list);
Tu peux par exemple définir "user_data" comme une structure avec le pointeur vers la liste comme membre.
Il faut utiliser un pointeur double, puisqu'on ne peut pas faire un return du pointeur vers la nouvelle tête de la liste à partir de la callback.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 ma_fonction (...) { GList * list = NULL; list = g_list_append(list, "test"); g_signal_connect(mon_widget, G_CALLBACK(ma_callback), ..., &list); /* ici on passe l'adresse de list et pas list lui même */ } ... ma_callback (..., gpointer user_data) { GList **ptr_to_list = user_data; g_assert (ptr_to_list != NULL); GList *list = *ptr_to_list; /* on ajoute, supprime des éléments */ list = g_list_append(list, "dans ma callback"); /* avant de sortir, on remet à jour l'endroit où se trouve la tête de la liste */ *ptr_to_list = list; }