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 :

GtkCurve, erreur d'allocation de memoire


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut GtkCurve, erreur d'allocation de memoire
    Bonjour,
    J'essai d'afficher une courbe dans une fenetre à l'aide du widget GtkCurve.
    La compilation se passe sans problème, mais lors de l'éxécution, j'ai cette erreur:

    GLib-ERROR **: /build/buildd/glib2.0-2.22.2/glib/gmem.c:136: failed to allocate 4294967276 bytes
    aborting...
    Abandon

    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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    gint main(gint argc, gchar ** argv)
    {
    	/* Variables */
    	GtkWidget * pWindow = NULL;
    	GtkWidget * pCurve = NULL;
    	GtkWidget * pBox = NULL;
    	/* Points de la courbe */
    	gfloat vector[4] = {-8, 0, -2, 7};
     
    	/* Initialisation de gtk */
    	gtk_init(&argc, &argv);
    	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
    	g_signal_connect(
    			G_OBJECT(pWindow),
    		   	"destroy",
    		   	G_CALLBACK(gtk_main_quit),
    		   	NULL
    			);
     
    	pBox = gtk_vbox_new(TRUE, 10);
    	gtk_container_add (GTK_CONTAINER(pWindow), pBox);
     
    	/* Création d'une courbe */
    	pCurve = gtk_curve_new();
    	gtk_curve_reset (GTK_CURVE(pCurve));
     
    	/* Prarmetrage de l'affichage de la courbe */
    	gtk_curve_set_range(GTK_CURVE(pCurve), -10, 10, -10, 10);
    	gtk_widget_set_sensitive(pCurve, FALSE);
     
    	/* Placement des points de la courbe */
    	gtk_curve_set_vector(GTK_CURVE(pCurve), 4, vector);
     
    	/* Parametrage du type de courbe
    	 * GTK_CURVE_TYPE_SPLINE
    	 * GTK_CURVE_TYPE_LINEAR
    	 * GTK_CURVE_TYPE_FREE
    	 */
    	gtk_curve_set_curve_type(GTK_CURVE(pCurve), GTK_CURVE_TYPE_SPLINE);
     
    	gtk_box_pack_start (GTK_BOX(pBox), pCurve, TRUE, TRUE, 0);
     
    	/* Affichage de la fenetre */
    	gtk_widget_show_all(pWindow);
     
    	/* Demarrage de la boucle evenementielle */
    	gtk_main();
     
    	return EXIT_SUCCESS;
    }
    J'ai cherché sur google, apparement, je ne suis pas le seul à avoir ce probleme, mais je n'ai pas trouvé de réponses

    Donc, si vous avez une petite idée...
    Merci

  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
    4294967276, c'est -20 quand tu l'interprètes comme un gint. Donc il doit y avoir qquepart uen allocation dont la taille est mal calculée. Je peux pas t'en dire plus.

  3. #3
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    4294967276, c'est -20 quand tu l'interprètes comme un gint.
    Je ne comprends pas trop...

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_print ("%u %d\n", (guint)4294967276, (gint)4294967276);
    Ca va afficher:

  5. #5
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    C'est curieux, parce que d'apres l'erreur, j'essaie d'allouer 4Go de Ram

    Sinon, ce -20, je ne vois pas d'où il sort, et je ne fais pas d'allocation dynamique

  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 : 55
    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 ne connais pas les GtkCurve mais en testant ton code le problème vient de la fonction gtk_curve_set_vector(GTK_CURVE(pCurve), 4, vector);.

    Cette fonction place automatiquement le type de dessin en GTK_CURVE_TYPE_FREE. Regarde le lien de la fonction ci-dessus c'est spécifié dans la doc. Comme tu forces ensuite le type en GTK_CURVE_TYPE_SPLINE, la bibliothèque ne doit plus être à même de fonctionner proprement je suppose.

    Si tu désactives la ligne gtk_curve_set_curve_type(GTK_CURVE(pCurve), GTK_CURVE_TYPE_SPLINE); ton code s'exécute sans problème.

Discussions similaires

  1. [Sécurité] Erreur d'allocation mémoire
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 28/04/2006, 08h34
  2. allocation de memoire pour char**
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 03/04/2006, 20h01
  3. outil permettant de tracker les alloc/dealloc memoire
    Par bob8181_2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/09/2005, 19h57
  4. Allocation de memoire
    Par zakjo_developper dans le forum C
    Réponses: 16
    Dernier message: 08/04/2005, 13h46
  5. char * et Allocation de memoire
    Par venomelektro dans le forum C++
    Réponses: 3
    Dernier message: 14/10/2004, 13h24

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