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 :

Problème de debuggage : Gtk-CRITICAL


Sujet :

GTK+ avec C & C++

  1. #1
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut Problème de debuggage : Gtk-CRITICAL
    Rebonjour.

    J'ai un petit soucis à l'éxecution de mon code.
    Il y a une barre d'outils avec 3...outils..
    Le premier, 'commencer un nouveau test', appelle la fonction 'Nouveau_Test' par un CALLBACK avec une structure (contenant une pVBox contenues dans la fenetre principale) en argument.

    En premier lieu, je voudrais juste afficher un label sur le clic du bouton.

    Au clic sur le bouton, voilà ce que j'obtiens dans ma console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test_barre_outils:6220): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkBox'
     
    (test_barre_outils:6220): Gtk-CRITICAL **: gtk_box_pack_end: assertion `GTK_IS_BOX (box)' failed
     
    (test_barre_outils:6220): Gtk-CRITICAL **: gtk_widget_show_all: assertion `GTK_IS_WIDGET (widget)' failed
    Voici mon 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
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    static GtkWidget *pToolbar = NULL;
     
    void Nouveau_Test(GtkWidget *widget, gpointer data);
     
    /*Structure contenant comme champs :
    >>Box : la pVBox contenue dans la fenetre principal
    >>Label : le label qui sera mis à jour pendant le décompte
    >>Bouton : le bouton qui sera dés/activé pendant le décompte
    */
    struct _Structure
    {
    	GtkWidget *Box;
    	GtkWidget *Label;
    	GtkWidget *Bouton;
    };
     
    typedef struct _Structure Structure;
     
    void Nouveau_Test(GtkWidget* widget, gpointer data)
    {
     
    Structure *struc;
    GtkWidget *Label;
     
    /*Récupération de la structure par date*/
    struc = (Structure*) data;
     
    /* Creation des labels */
    Label = gtk_label_new("Vous etes sur le point de commencer un nouveau test.");
    //structure->pLabel2=gtk_label_new("Une serie de 10 images va s'afficher. Vous aurez a chaque fois 5 secondes pour visualiser l'image avant de cliquer ou vous le desirez.");
     
    /* Centrage des labels */
    gtk_label_set_justify(GTK_LABEL(Label), GTK_JUSTIFY_CENTER);
    //gtk_label_set_justify(GTK_LABEL(structure->pLabel2), GTK_JUSTIFY_CENTER);
     
    /* Ajout des labels à la fenetre */
    gtk_box_pack_end(GTK_BOX(struc->Box), Label, FALSE, FALSE, 0);
    //gtk_box_pack_start(GTK_BOX(structure->Box), structure->pLabel2, FALSE, FALSE, 0);
     
    gtk_widget_show_all(struc->Box);
     
    }
     
    int main(int argc, char **argv)
    {
    GtkWidget *pWindow;
    GtkWidget *Barre;
    Structure *structure;
    structure = g_malloc(sizeof(Structure));
     
     
    gtk_init(&argc, &argv);
     
    /* Creation de la fenetre */
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(pWindow), "Test Avant Projet");
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
    /*Création de la pVBox*/
    structure->Box = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(pWindow), structure->Box);
     
    /* Creation de la barre d'outils */
    Barre = gtk_toolbar_new();
    gtk_box_pack_start(GTK_BOX(structure->Box), Barre, FALSE, FALSE, 0);
     
    /* Creation a partir de stock */
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),GTK_STOCK_NEW,"Commencer un nouveau test",NULL,G_CALLBACK(Nouveau_Test),(gpointer*) structure, -1);
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),GTK_STOCK_SAVE,"Enregistrer",NULL,NULL,NULL,-1);
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),GTK_STOCK_QUIT,"Fermer",NULL,G_CALLBACK(gtk_main_quit),NULL,-1);
     
    /* Modification de la taille des icones */
    gtk_toolbar_set_icon_size(GTK_TOOLBAR(Barre),GTK_ICON_SIZE_BUTTON);
    /* Affichage uniquement des icones */
    gtk_toolbar_set_style(GTK_TOOLBAR(Barre),GTK_TOOLBAR_ICONS);
     
    gtk_widget_show_all(pWindow);
     
    /* Libération de la mémoire */
    g_free(structure);
     
    gtk_main();
     
    return EXIT_SUCCESS;
    }
    Je n'arrive pas à corriger ce problème...

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Salut !

    Ton problème se situe ici (j'ai changé la mise en forme de l'appel car c'est trop long sur une seule ligne donc plus difficile à lire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    gtk_toolbar_insert_stock (
       GTK_TOOLBAR (Barre), 
       GTK_STOCK_NEW,
       "Commencer un nouveau test",
       NULL,
       G_CALLBACK (Nouveau_Test),
       (gpointer*) structure,
       -1
    );
    ...
    Un gpointer étant déjà un void *, toi dans ton cast tu fait l'équivalent de void ** ce qui n'est pas bon du tout, fait simplement
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut
    Merci pour ta réponse Franck.

    Après correction (et amélioration de la visibilité), j'ai une segmentation fault. J'ai pas vraiment d'idée d'ou ca peut venir étant donné que j'ai pas de tableau (souvent c'est quand on déborde d'un tableau non..?)

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par thibane
    Merci pour ta réponse Franck.

    Après correction (et amélioration de la visibilité), j'ai une segmentation fault. J'ai pas vraiment d'idée d'ou ca peut venir étant donné que j'ai pas de tableau (souvent c'est quand on déborde d'un tableau non..?)
    Pas forcément, ca peut venir de plein de chose ... fait voir ton nouveau code !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut
    Ben en fait, c'est le même que la dernière fois, je te le remets pour le plaisir...

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    GtkWidget *pToolbar = NULL;
     
    void Nouveau_Test(GtkWidget *widget, gpointer data);
     
    /*Structure contenant comme champs :
    >>Box : la pVBox contenue dans la fenetre principal
    >>Label : le label qui sera mis à jour pendant le décompte
    >>Bouton : le bouton qui sera dés/activé pendant le décompte
    */
    struct _Structure
    {
    	GtkWidget *Box;
    	GtkWidget *Label;
    	GtkWidget *Bouton;
    };
     
    typedef struct _Structure Structure;
     
    void Nouveau_Test(GtkWidget* widget, gpointer data)
    {
     
    Structure *struc;
    GtkWidget *Label;
     
    /*Récupération de la structure par data*/
    struc = (Structure*)data;
     
    /* Creation des labels */
    gtk_label_set_label(GTK_LABEL(struc->Label),"Vous etes sur le point de commencer un nouveau test.");
    //structure->pLabel2=gtk_label_new("Une serie de 10 images va s'afficher. Vous aurez a chaque fois 5 secondes pour visualiser l'image avant de cliquer ou vous le desirez.");
     
    /* Centrage des labels */
    gtk_label_set_justify(GTK_LABEL(struc->Label), GTK_JUSTIFY_CENTER);
    //gtk_label_set_justify(GTK_LABEL(structure->pLabel2), GTK_JUSTIFY_CENTER);
     
    /* Ajout des labels à la fenetre */
    gtk_box_pack_end(GTK_BOX(struc->Box), struc->Label, FALSE, FALSE, 0);
    //gtk_box_pack_start(GTK_BOX(structure->Box), structure->pLabel2, FALSE, FALSE, 0);
     
    gtk_widget_show_all(struc->Box);
     
    }
     
    int main(int argc, char **argv)
    {
    GtkWidget *pWindow;
    GtkWidget *pLabel;
    GtkWidget *Barre;
    Structure *structure;
    structure = g_malloc(sizeof(Structure));
     
     
    gtk_init(&argc, &argv);
     
    /* Creation de la fenetre */
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(pWindow), "Test Avant Projet");
    gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
    /*Création de la pVBox*/
    structure->Box = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(pWindow), structure->Box);
     
    /*Création du label vide*/
    structure->Label = gtk_label_new("");
    gtk_box_pack_start(GTK_BOX(structure->Box), structure->Label, FALSE, FALSE, 0);
     
    /* Creation de la barre d'outils */
    Barre = gtk_toolbar_new();
    gtk_box_pack_start(GTK_BOX(structure->Box), Barre, FALSE, FALSE, 0);
     
    /* Creation a partir de stock */
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),
    			 GTK_STOCK_NEW,
    			 "Commencer un nouveau test",
    			 NULL,G_CALLBACK(Nouveau_Test),
    			 (gpointer)structure,
    			 -1);
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),
    			 GTK_STOCK_SAVE,
    			 "Enregistrer",
    			 NULL,
    			 NULL,
    			 NULL,
    			 -1);
    gtk_toolbar_insert_stock(GTK_TOOLBAR(Barre),
    			 GTK_STOCK_QUIT,
    			 "Fermer",
    			 NULL,
    			 G_CALLBACK(gtk_main_quit),
    			 NULL,
    			 -1);
     
    /* Modification de la taille des icones */
    gtk_toolbar_set_icon_size(GTK_TOOLBAR(Barre),GTK_ICON_SIZE_BUTTON);
    /* Affichage uniquement des icones */
    gtk_toolbar_set_style(GTK_TOOLBAR(Barre),GTK_TOOLBAR_ICONS);
     
    gtk_widget_show_all(pWindow);
     
    /* Libération de la mémoire */
    g_free(structure);
     
    gtk_main();
     
    return EXIT_SUCCESS;
    }

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    En fait, ton erreur est .. comment dire Tu fait un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Libération de la mémoire */
    g_free(structure);
    Avant l'appel à
    alors qu'il faut le fair après vu qu'il s'agit de libérer les ressources à la sortie du programme et vu que tu utilises cette structure dans ton callback bin crash
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut
    merci

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

Discussions similaires

  1. Problème débutant en GTK+
    Par Ibn Rochod dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 25/03/2008, 20h08
  2. Problème d'installation GTK mandriva 2008.0
    Par zephyrin_damortien dans le forum GTK+
    Réponses: 2
    Dernier message: 19/10/2007, 19h39
  3. Problème de librairie GTK+
    Par Nick_Holmes dans le forum Eclipse C & C++
    Réponses: 2
    Dernier message: 12/10/2007, 14h11
  4. Réponses: 4
    Dernier message: 21/06/2007, 17h06
  5. Petit Problème dans une GTK-Table
    Par simtim dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 16/04/2007, 11h41

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