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 :

Fuite mémoire impressionante


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut Fuite mémoire impressionante
    Bonjour .
    Je décellope en se moment un jeu de dames chinoises en réseaux pour mon projet de DUT R&T.Tout fonctionne presque très bien car a chaque rafraichissment du plateau l'utilisation mémoire augmente d'environ 300ko .Donc dans une partie a 6 joueur je vous laisse imaginer le résultat .
    J'ai essayer de faire des g_free mais cela produit une erreur de segmentation.

    Voici un extrait ( Le code Fait plus de 5000 lignes).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    GtkWidget **pImage0;
    GtkWidget **pImage1;
    GtkWidget **pImage2;
    GtkWidget *........ect jusqu'a 121
     
    GtkWidget *event_box0;
    GtkWidget *event_box0;
    GtkWidget *event_box0;
    GtkWidget *even........ect jusqu'a 121
     
    //Il y a une eventbox et une image  par pion .
    extrait du code d'affichage :

    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
     
    void affiche_pion_blanc()
    {
        if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[0]==0 )
        {
     
            event_box0=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box0, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box0), pImage0);
     
            gtk_widget_add_events(event_box0,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box0), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[0]=1;
            gtk_widget_show_all(Table);
        }
     
     
        else if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[1]==0 )
        {
     
            event_box1=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box1, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box1), pImage1);
     
            gtk_widget_add_events(event_box1,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box1), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[1]=1;
            gtk_widget_show_all(Table);
        }
     
        else if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[2]==0 )
        {
     
            event_box2=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box2, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box2), pImage2);
     
            gtk_widget_add_events(event_box2,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box2), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[2]=1;
            gtk_widget_show_all(Table);
        }
     
        else if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[3]==0 )
        {
     
            event_box3=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box3, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box3), pImage3);
     
            gtk_widget_add_events(event_box3,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box3), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[3]=1;
            gtk_widget_show_all(Table);
        }
     
        else if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[4]==0 )
        {
     
            event_box4=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box4, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box4), pImage4);
     
            gtk_widget_add_events(event_box4,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box4), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[4]=1;
            gtk_widget_show_all(Table);
        }
     
        else if ((4+2*i-j)>=0 && (5+2*i-j)>=0 && plateau[i][j].type_emp=='p' && liste_joueur[(* plateau[i][j].pion_emp).num_joueur].couleur == 0 && sel[5]==0 )
        {
     
            event_box5=gtk_event_box_new();
     
     
            gtk_table_attach(GTK_TABLE(Table), event_box5, 4+2*i-j,5+2*i-j, 2*j,2*j+1,GTK_FILL, GTK_FILL, 0, 0);
     
            gtk_container_add(GTK_CONTAINER(event_box5), pImage5);
     
            gtk_widget_add_events(event_box5,GDK_BUTTON_PRESS_MASK);
            g_signal_connect(G_OBJECT(event_box5), "button_press_event", G_CALLBACK(clique_pion), NULL);
            sel[5]=1;
            gtk_widget_show_all(Table);
        }
    //...........etc
    Fonction de rafraichissment :
    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
     
    void rafraichissement()
     
    {
     
     
        for (n=0;n<=nb_joueur+1;n++)
        {
            envoi_numjouant[n]=1;/*On envoi le num jouant */
        }
        if (Table!=NULL)
        {
            gtk_widget_destroy(Table);
     
        }
        Table = gtk_table_new(30, 30, TRUE);
        gtk_container_add(GTK_CONTAINER(boite_horizontale), Table);
        gtk_statusbar_pop(GTK_STATUSBAR(bar_detat), GPOINTER_TO_INT(messageid));
     
        if (num_jouant==0)
        {
            message0();
        }
     
        int boucle ;
        for (boucle=0;boucle<=299;boucle++)
        {
            sel[boucle]=0;
     
        }
        printf("***MISE A JOUR DE L'AFFICHAGE***\n");
        gtk_main_iteration();
        affiche();
        if (num_jouant==0)
        {
            message0();
        }
        else if (num_jouant==1)
        {
            message1();
        }
        else if (num_jouant==2)
        {
            message2();
        }
        else if (num_jouant==3)
        {
            message3();
        }
        else if (num_jouant==4)
        {
            message4();
        }
        else if (num_jouant==5)
        {
            message5();
        }
        gtk_main_iteration();
     
     
    }
    Voila merci d'avance .

  2. #2
    Membre émérite
    Avatar de matrix788
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    740
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 740
    Billets dans le blog
    2
    Par défaut
    je pense que tu devrais t'orienter de ce coté :

    g_malloc

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Je pense avoir régler de le probleme :

    dans la fonction de rafraichissement j'ai rajouté :


    gtk_destroy(pimagex) pour x allant de 0 à 120

    pareil pour les event boxs .C'est lourd mais sa marche .


    Merci de ta réponse matrix788.

    Au revoir

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

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 10h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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