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+ Discussion :

assertion 'child->parent == NULL' failed


Sujet :

GTK+

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut assertion 'child->parent == NULL' failed
    Bonjour a tous !

    Je suis en train de dev un solitaire comme projet pour mes études, et je suis tombé sur un os !

    Pour pouvoir manipuler sans problemes mes widgets, je manipule différentes structures qui me serviront lors de l'envoi aux fonctions callbacks.

    Voici ces structures :
    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
     
    typedef struct Carte
    {
        int val;
        int color; //O noir, 1 rouge;
        int type; //0 pique, 1 trefle, 2 coeur, 3 carreau;
        GtkWidget* widget;
    }t_Carte;
     
    typedef struct Clist
    {
        t_Carte* data;
        struct Clist* prec;
        struct Clist* next;
    }t_Clist;
     
    typedef struct Plateau
    {
        t_Clist* AncrePioche;
        GtkWidget* Pioche;
        t_Clist* Fin[4];
        GtkWidget* FinWidget[4];
        t_Clist* Tas[2][7]; //Ligne : 0 caché, 1 visible
    }t_Plateau;
    J'affiche sans probleme le widget de la pioche et FinWidget[4], mais j'suis tombé sur un petit soucis avec l'attach dans une table des widgets de mes tas.
    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
     
    void RecursAttach(GtkWidget* table, t_Clist* c, int i, int j)
    {
     
        if (c != NULL)
        {
            gtk_table_attach_defaults(GTK_TABLE(table),(c->data->widget),i,i+10,j,j+10);
            RecursAttach(table,c->next,i,j+3);
        }
     
    }
     
    void AttacherTas(GtkWidget* table, t_Plateau plateau)
    {
        int i = 0;
        int j = 0;
        for (i=0;i<2;i++)
        {
            for (j=0;j<7;j++)
            {
                 RecursAttach(table, plateau.Tas[i][j],60+(i*15),30+(j*10));
     
            }
        }
    }
    AttacherTas se charge de gérer l'envoi a RecursAttach de chaque liste chainées du tableau, avec des places de dégat

    RecursAttach est une fonction récursive qui affiche le wisget de mon element de liste puis rappelle RecursAttach sur l'element suivant.

    Je tombe malheureusement sur un petit soucis, dans la console je me prend des gtk_table_attach : assertion 'child->parent == NULL' failed

    Quelqu'un aurait une petite idée svp ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Difficile de répondre sur une fonction récurcive. As-tu essayé un g_assert(c->data->widget!=NULL); pour t'assurer que le pointeur contient bien quelque chose?

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut
    D'après mon débuggeur, le pointeur pointe bien sur quelque chose. Je me demande si ca ne vient pas du fait qu'un widget ne peut pas etre a deux endroits en même temps.

    Je pensais pas qu'implémenter ma propre liste chainée aurait ce comportement sur le widget en "l'empechant" d'etre inséré...

    Auriez vous une solution si c'est bien cela le probleme ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Pimouss_Epita Voir le message
    ...Je me demande si ca ne vient pas du fait qu'un widget ne peut pas etre a deux endroits en même temps.
    Tu viens de répondre à ton problème. En effet on ne peut pas insérer un widget à deux endroits en même temps. Il faut en faire des copies.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par Pimouss_Epita Voir le message
    D'après mon débuggeur, le pointeur pointe bien sur quelque chose. Je me demande si ca ne vient pas du fait qu'un widget ne peut pas etre a deux endroits en même temps.

    Je pensais pas qu'implémenter ma propre liste chainée aurait ce comportement sur le widget en "l'empechant" d'etre inséré...

    Auriez vous une solution si c'est bien cela le probleme ?
    Un widget peut avoir plusieurs enfants, mais n'a qu'un seul parent.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Debug Assertion Failed ! File: dbgheap.c
    Par jacques_henry dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2015, 11h29
  2. comment un parent peut savoir si son child se ferme?
    Par guimond dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/02/2006, 16h50
  3. Réponses: 4
    Dernier message: 22/11/2005, 17h55
  4. Réponses: 3
    Dernier message: 07/12/2004, 22h09

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