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 : gdk_pixbuf_new_from_file


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut Problème : gdk_pixbuf_new_from_file
    Salut a tous !
    Dans le cadre du dévellopement d'un jeux de morpion, je suis amené, pour gérer l'affichage à utiliser la fonction gdk_pixbuf_new_from_file.
    Seulement, lors des tests il est apparût qu'elle occasionait une erreur de segmentation. Ne trouvant pas l'erreur, j'ai décidé de tester un petit programme n'utilisant que cette fonction pour voire ce que ça donne.

    Le voici :
    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
    #include <stdio.h>
    #include <gdk-pixbuf/gdk-pixbuf.h>
    #include <glib/gprintf.h>
     
    int
    main (void)
    {
      GError * error = NULL;
      GdkPixbuf* pPixBufA;
     
      pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/arch-logo.png", &error);
     
      if (pPixBufA == NULL && error != NULL)
      {
         g_printf ("%s\n", error->message);
         g_error_free (error);
      }
    }
    Pour la compilation, j'ai utilisé la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -g main.c -o  main `pkg-config --cflags --libs gtk+-2.0 gthread-2.0 gobject-2.0`
    A l'execution, le programme me renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (process:11344): GLib-GObject-CRITICAL **: gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
     
    (process:11344): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
     
    (process:11344): GLib-GObject-CRITICAL **: g_object_new: assertion `G_TYPE_IS_OBJECT (object_type)' failed
    En debugant avec gdb, j'oberve que l'exection se termine à cause d'un segmentation fault.
    Voici ce que m'indique gdb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Program received signal SIGSEGV, Segmentation fault.
    0x00007f5c15580e66 in gdk_pixbuf_new_from_data ()
       from /usr/lib/libgdk_pixbuf-2.0.so.0
    Donc voilà j'aimerai donc savoir pourquoi ces petites lignes de codes génèrent ces erreurs, ce qui me semble assez bizarre.
    Merci d'avance pour votre aide.

  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
    Comme te l'indique (un peu) le 1er message d'erreur, il faut commencer par appeler g_type_init.

  3. #3
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut
    Salut,

    c'est clair ... parce que ton programme est , en principe , fondée sur Gtk.
    Donc .... il faut faire quoi ?
    Il faut faire l'initialization de Gtk.

    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
     
    int
    main ( int argc, char *argv[] )
    {
    //********************************************************
      gtk_init (&argc, &argv);
    //********************************************************
     
      GError * error = NULL;
      GdkPixbuf* pPixBufA;
     
      pPixBufA = gdk_pixbuf_new_from_file ( "/usr/share/pixmaps/chess.png", &error );
     
      if ( pPixBufA == NULL && error != NULL )
      {
         g_print ( "%s\n", error->message );
         g_error_free ( error );
      }
      return 0;
    }
    Bonne journee. Fredy

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut
    Merci pour m'avoir aidé, maintenant ça marche très bien, mais seulement ce code, c'était juste pour comparer avec ce qui ne fonctionnait pas dans mon projet.
    Or là je ne comprend vraiment pas pourquoi le code que j'utilise dans mon projet amène à un segmentation fault.

    En fait j'appele cette fonction pour charger une image pour le widget que je suis en train de créer avec la méthode décrite dans un tutorial de ce site ici. J'ai commencé par ajouter les premières fonctionnalitées à mon widget et ça marchait très bien, j'ai donc décidé d'ajouter une fonctionnalité qui necessite de la fonction mon_widget_new
    de prendre en plus comme arguments deux noms de fichiers et le widget les charge sous forme de pixbuf avec la fonction gdk_pixbuf_new_from_file pour plus tard les utiliser ...
    Seulement dès l'apel de gdk_pixbuf_new_from_file dans mon_widget_new un segmentation fault se produit.

    Voici ce que me donne gdb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Program received signal SIGSEGV, Segmentation fault.
    0x00007f7e3aa66f5e in _int_malloc () from /lib/libc.so.6
    Ce que je ne comprend pas c'est que l'utilisation de gdk_pixbuf_new_from_file semble être la même dans le petit code précedent.

  5. #5
    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
    T'as l'air d'avoir une corruption mémoire quelque part ou un double free... Sous linux, valgrind devriat te donner plus d'informations.

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut
    Oui merci valgrind m'a permi de mieu cerner le problème, qui est en passe d'être résolu.
    Merci encore!

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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