Bonjour à tous.
Bon j'ai un jeu en GTK qui marche presque à merveille à un seul détail près : l'affichage des scores et des niveaux à travers des GtkLabel. Je me sens bête . En fait l'initialisation de leur contenu ne pose aucun problème mais la réécriture du contenu me donne une erreur de segmentation brutale avec arrêt du programme quoi que je fasse.
Alors voici le contexte (les éléments importants seront soulignés) :
Les deux GtkWidget correspondant appartiennent à cette structure.
Voici le contenu de mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct { Info * info; GtkWidget * window; Layout layout; Menu menu; GtkWidget * area, * miniarea, *labellevel, *labelscore; GtkWidget * statusbar; } Gui;
Les deux structures sont initialisés dans des sous fonctions de gui_init(...) :
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 Info info; Gui gui; gtk_init (&argc, &argv); info_init_default (&info); gui_init (&gui, &info); gtk_widget_show_all (gui.window); gtk_main (); return 0;
Dont voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void gui_init (Gui *g, Info *info) { puts ("gui_init ..."); g->info = info; gui_init_window (g); gui_init_layout (g); gui_init_menu (g); gui_init_labellevel (g); gui_init_labelscore (g); gui_init_miniarea (g); gui_init_statusbar (g); gui_init_area (g); }
A priori le problème ne peut pas venir de là puisque que dans mon interface graphique les deux GtkLabel sont correctement insérés et initialisés dans leurs frames.
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 void gui_init_labellevel (Gui * g) { GtkWidget * l = g->labellevel; l= gtk_label_new ("0"); gtk_container_add (GTK_CONTAINER(g->layout.level_frame), l); } void gui_init_labelscore (Gui * g) { GtkWidget * l = g->labelscore; l = gtk_label_new ("0"); gtk_container_add (GTK_CONTAINER(g->layout.score_frame), l); }
Mais dès que je lance le jeu, j'ai une erreur de segmentation dès le premier appel de cette fonction qui est censée afficher le nouveau score dans le GtkLabel :
Ici j'ai enlevé l'insertion du vrai score où la chaine été préparée avec sprintf pour simplement essayé de réafficher un nouveau texte quelconque mais même comme ça cela plante. Les fonctions entre commentaires sont celles que j'ai tenté d'utiliser et j'ai obtenu le même résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void on_labelscore (Gui * g) { GtkWidget * l = g->labelscore; puts ("on_labelscore"); gtk_label_set_text (GTK_LABEL(g->labelscore), "read"); /*gtk_label_set_label (GTK_LABEL(l), "read");*/ /*g_object_set (l, "label", "read", NULL);*/ puts ("OK"); }
Dans la console, "on_labelscore" s'affiche suivi immédiatement de "Erreur de segmentation", OK ne s'affiche jamais.
Pour précision, j'appelle cette fonction avec cette ligne
dans une fonction ou Gui * g est utilisé pour d'autres choses qui marche très bien donc le pb à priori ne vient pas de là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 on_labelscore (g);
Quelqu'un aurait-il une idée de la source du problème ?
Je remercie déjà les personnes qui prendront le temps de lire ce post.
Partager