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-WARNING et Gtk-CRITICAL incompréhensibles


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut Gtk-WARNING et Gtk-CRITICAL incompréhensibles
    Bonsoir
    Pourriez-vous m'expliquer ce que signifient ces messages d'erreurs que j'obtiens pendant l'exécution de mon programme qui, par ailleurs, semble correctement fonctionner :

    messages :
    (projet:3250): Gtk-WARNING **: Invalid text buffer iterator: either the iterator is uninitialized, or the characters/pixbufs/widgets in the buffer have been modified since the iterator was created.
    You must use marks, character numbers, or line numbers to preserve a position across buffer modifications.
    You can apply tags and insert marks without invalidating your iterators,
    but any mutation that affects 'indexable' buffer contents (contents that can be referred to by character offset)
    will invalidate all outstanding iterators

    (projet:3250): Gtk-CRITICAL **: gtk_text_buffer_insert_with_tags: assertion `gtk_text_iter_get_buffer (iter) == buffer' failed
    merci pour votre aide

  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 : 54
    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
    Tu dois manipuler un GtkTextBuffer. Lors de tes manipulations tu as du initialisé un/des GtkTextIter. Malheureusement un GtkTextIter n'est pas un pointeur au sens propre du terme. Donc tu ne peux pas l'utiliser tout au long du programme.
    Garde en tête de ne jamais conserver un GtkTextIter. Tu l'initialises quand tu en a besoin, tu t'en sers, et ensuite tu le détruis.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut
    Comment détruire un gtk_iter ?

  4. #4
    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 : 54
    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
    Je suis peut être allé un peu vite dans ma réponse. En règle générale un iterateur est initialisé en local dans la fonction qui doit traiter le problème. Une fois la fonction terminée l'itérateur est automatiquement détruit.

    Prenons un code simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void my_function()
    {
      GtkTextIter iter;
     
      gtk_text_buffer_get_iter_at_line (buffer, &iter, 0);
    }
    Je récupère dans iter un pointeur sur la ligne 0 de mon buffer. Comme tu peux le voir je n'alloue pas la variable "iter" dans le tas. Elle est locale à my_function();. Je ne fais que changer l'adresse de la variable "iter" pour quelle corresponde à l'adresse de la ligne 0 dans buffer.

    Une fois la fonction terminée iter est détruite du fait de son appartenance locale à my_function();. Pour autant je n'ai pas touché au contenu du buffer.

    Si le buffer change ensuite l'adresse de la ligne 0 à peut être aussi changée. Si j'avais conservé l'adresse dans iter il peut se produire un conflit qui correspond au warnings que tu as.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Par défaut
    Ok , mais je n'ai toujours pas compris pourquoi mes erreurs .

    Dans mon programme, dans plusieurs fonctions j'utilise :

    GtkTextIter ei ;
    gtk_text_buffer_get_end_iter (pTextBuffer, &ei) ;
    gtk_text_buffer_insert_with_tags (pTextBuffer, &ei, message, -1, p_tag, NULL);

    c'est ce code qui génère mes erreurs apparemment, mais pour quelle raison ?

    merci !!

  6. #6
    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 : 54
    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
    C'est en effet assez bizarre. Contrôle l'état des différents pointeurs. pTextBuffer est-il valide? p_tag aussi?

    Essaie la fonction plus simple pour voir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void                gtk_text_buffer_insert              (GtkTextBuffer *buffer,
                                                             GtkTextIter *iter,
                                                             const gchar *text,
                                                             gint len);

Discussions similaires

  1. geoserver et gtk warning cannot open display
    Par mapmip dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 12/12/2012, 16h39
  2. fonction fillReport Erreur Gtk-WARNING
    Par dams2209 dans le forum Jasper
    Réponses: 0
    Dernier message: 15/03/2009, 10h55
  3. Gtk-WARNING **: Could not find signal handler
    Par yostane dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 24/11/2008, 14h07
  4. Debutant: Gtk-WARNING ?
    Par EricStib dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 19/01/2008, 22h48
  5. Gtk-WARNING lors de l'ajout d'un GtkEntry
    Par damien.yep dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 01/09/2006, 17h57

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