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 :

gtk_builder_get_object fait un segment fault


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut gtk_builder_get_object fait un segment fault
    Bonjour,

    Je fais appel a votre aide.

    J'utilise Glade3;
    J'ai défini 3 boutons dans une fenêtre.
    -- 3 togglebuttonDo0 à togglebuttonDo3
    Les signaux sont définis dans glade:
    -- on_togglebuttonDo0_toggled à on_togglebuttonDo3_toggled
    Mon programme possède les 3 routines suivantes:

    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
     
    void* on_togglebuttonDo0_toggled(GtkWidget* ptrbutton,gpointer data)
    {
    	printf("le bouton 0 a fonctionné.\n");
    	return 0;
    }
     
    void* on_togglebuttonDo1_toggled(GtkWidget* ptrbutton,gpointer data)
    {
    	gdk_beep ();
    	printf("le bouton 1 a fonctionné.\n");
    	return 0;
    }
     
    void* on_togglebuttonDo2_toggled(GtkWidget* ptrBouton,gpointer data)
    {
    	GtkWidget *ptrBouton0=NULL;
     
    	printf("le bouton 2 a fonctionné.\n");
    	/* L'appuie du bouton 2 doit simuler l'appuie du bouton 0. */
    printf("-->1\n");
    	ptrBouton0= GTK_WIDGET(gtk_builder_get_object(p_builder,"togglebuttonDo0"));
    printf("-->2\n");
    	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ptrBouton0),0);
    	return 0;
    }
    Résultat à l'exécution en cliquant dans l'ordre:
    le bouton 0 a fonctionné.
    le bouton 1 a fonctionné.
    le bouton 2 a fonctionné.
    -->1
    Erreur de segmentation

    Il me semble que l'erreur est dans l'utilisation de p_buider.
    Pourtant il a bien fonctionné pour l'ouverture de ma fenêtre:

    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
     
    	GtkBuilder  *  p_builder   = NULL;
     
    	int chargeInterface(void)
    	{
    		GError      *  p_err       = NULL;
    		GtkWidget *mainwin;
     
    		/* Creation d'un nouveau GtkBuilder */
    		p_builder = gtk_builder_new ();
    		if (p_builder == NULL) return EXIT_FAILURE;
     
    		/* Chargement du XML dans p_builder */
    		gtk_builder_add_from_file (p_builder, "interface.xml", & p_err);
    		...
     
    		gtk_builder_connect_signals ( p_builder, NULL );
    		mainwin= GTK_WIDGET(gtk_builder_get_object(p_builder,"window1"));
     
    		gtk_widget_show_all ( mainwin );
    		...
    A moins qu'il sagit d'une histoire de Thread n'héritant pas de p_buider ou parce que mon bouton est contenu dans le Window1, je ne vois pas de raison au non fonctionnement.
    Ne me dite pas que les routines de GTK me sont interdites dans une routine de callback !

    Une idée ?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Mets déjà un GTK_BUILDER (p_builder) dans ta routine de callback pour t'assurer que le p_builder a l'air valide, ton pb peut être lié à une corruption mémoire. Je ne comprends pas pourquoi tu parles de threads à un moment par contre ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut
    Bon j'ai trouvé.
    Il trainant un unref(p_builder) dans ma routine principale.
    Je me demande ce qu'il fout là.
    Deux journées pleines de perdu a cause de ça.
    Je suis dégouté.

    Merci d'avoir pris le temps de me lire.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 31/12/2013, 19h23
  2. Réponses: 6
    Dernier message: 13/11/2005, 12h11
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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