IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Erreur de segmentation GTK2.0 incomprise


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut Erreur de segmentation GTK2.0 incomprise
    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.
    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;
    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
    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;
    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
     
    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);    
    }
    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
    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);	 
    }
    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.
    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 :
    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");	
    }
    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 :
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    on_labelscore (g);
    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à.
    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 .

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Comment est appelé on_labelscore(Gui *g); ?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    on_labelscore est appelée dans cette fonction (souligné).
    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
    gboolean on_miniarea_expose (GtkWidget *widget, GdkEventExpose *e, gpointer data)
    {
    	GdkGC *gc = gdk_gc_new (widget->window);
    	Gui * g   = data;
    	Couple * c = & g->info->couple;
    	int w, h;
    	int ct1;
    	
    	(void) e;
    	
    	puts ("on_miniarea_expose");
    	gdk_drawable_get_size (widget->window, &w, &h);
    	
    	/* Fond */
        gc_set_rgb_fg (gc, GREY); 
        gdk_draw_rectangle (widget->window, gc, TRUE, 0, 0, w, h);
        
        if (g->info->stategame.state == STOP ||
        	g->info->stategame.state == BEGIN) {
        	g_object_unref (gc);
        	return TRUE;
        }
        
        /* Next piece */
       	for (ct1 = 0; ct1 < 2; ct1++) {
    		switch (c->next_piece [ct1]) {			
    			case PBLEU 		: gc_set_rgb_fg  (gc, BLUE); 	break;
    			case PMAGENTA	: gc_set_rgb_fg (gc, MAGENTA); 	break;
    			case PVERT		: gc_set_rgb_fg (gc, GREEN); 	break;
    			case PJAUNE		: gc_set_rgb_fg (gc, YELLOW); 	break;
    			case PROUGE		: gc_set_rgb_fg (gc, RED); 		break;
    			default 		: continue;		break;
    		}
    		gdk_draw_arc (widget->window, gc, TRUE, 
    					  ct1==0?w/4:w/2, h / 2 - 25, w/4, h/4, 0, 360*64);
        }
        
        
        on_labelscore (g);
        
        g_object_unref (gc);
    	return TRUE;
    }

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    C'est bon l'erreur a été décelée sur le forum C où j'ai postée par accident.
    C'est l'initialisation qui posait problème !
    J'initialisé l sans aucun lien avec g->labelscore et c'est ce dernier que j'essayais de modifier par la suite... Une belle bougnette quoi !
    Merci à diogène et à gérald3d pour leurs aides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de segmentation GTK2.0 incomprise
    Par baguiwoopy dans le forum C
    Réponses: 2
    Dernier message: 24/04/2012, 19h44
  2. [MALLOC] erreur de segmentation incomprise
    Par Link14 dans le forum Débuter
    Réponses: 13
    Dernier message: 08/11/2009, 00h18
  3. [GMP] Erreur de segmentation incomprise
    Par SeaX dans le forum C
    Réponses: 0
    Dernier message: 21/02/2008, 14h55
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo