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 :

Supprimer le contenu d'une GList


Sujet :

GTK+ avec C & C++

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 151
    Points : 154
    Points
    154
    Par défaut Supprimer le contenu d'une GList
    Bonjour ,

    Je voudrais vider complètement le contenu d'une GList pour la réutiliser après.
    Ne voyant de fonction proposée d'office pour la question, j'ai d'abord essayé cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_list_foreach (liste, (GFunc)g_free, NULL);
    g_list_free (liste);
    Cette solution fonctionne bien à la fin du programme (après le gtk_main_quit), mais si je l'utilise en cours de programme pour réutiliser la liste ensuite, le programme se fige (processeur à 100%)

    J'ai essayé en supprimant les éléments manuellement (supprimer le dernier jusqu'à ce qu'il n'y en ait plus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GList *item = NULL;
     
    while (item = g_list_last(liste))
        g_list_remove (liste, item);
     
    g_list_free (item);
    Mais le résultat n'est pas plus convaincant. J'avoue que là, je bloque complètement, sur un sujet qui me paraissait pourtant tout con à première vue !

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par bigben89
    Ne voyant de fonction proposée d'office pour la question, j'ai d'abord essayé cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_list_foreach (liste, (GFunc)g_free, NULL);
    g_list_free (liste);
    C'est la bonne méthode. Par contre il ne faut pas oublier le :
    Citation Envoyé par bigben89
    Cette solution fonctionne bien à la fin du programme (après le gtk_main_quit), mais si je l'utilise en cours de programme pour réutiliser la liste ensuite, le programme se fige (processeur à 100%)
    Le problème se situe à la réutilisation de la liste dans ce cas (surement parce que liste n'est pas NULL).

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 151
    Points : 154
    Points
    154
    Par défaut
    J'avais déjà essayé avec ou sans NULL, le résultat est le même !

    Le problème bloque sur cette partie du 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
    ...
     
    if(gtk_dialog_run(GTK_DIALOG (pFileSelection))==GTK_RESPONSE_OK)
    {
        GSList *filelist = NULL;
        gint i;
     
        // je récupère les chemins des fichiers sélectionnés
        filelist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(pFileSelection));
     
        // si ma liste n'est pas vide, je supprime le contenu ( g_list_foreach... avec la GList à NULL)
        if(ma_liste.liste!=NULL)
            clear_list(ma_liste.liste);
     
        // je mets les chemins récupérés dans ma GList
        for(i=0; i<g_slist_length (filelist); i++)
            ma_liste.liste = g_list_append(ma_liste.liste, nouveau_morceau(g_slist_nth_data(filelist, i),"","","","","") );
     
        // met à jour l'affichage dans le treeview
        update_list_store (ma_liste.liste);
    }
     
    ...
    Quand la liste est vide, cette partie là s'exécute sans problème, mais dans le cas contraire, le programme se bloque !
    Peut-être que ça vient de cette partie là, je sais pas trop !

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par bigben89
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        // si ma liste n'est pas vide, je supprime le contenu ( g_list_foreach... avec la GList à NULL)
        if(ma_liste.liste!=NULL)
            clear_list(ma_liste.liste);
    Si tu mets la liste à NULL dans la fonction clear_list c'est normal, les modifications sont locals à la fonction. Au retour ma_liste.liste à toujours la même valeur

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 151
    Points : 154
    Points
    154
    Par défaut
    ah oui, effectivement, sans passer par une fonction, ça marche déjà bcp mieux !


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

Discussions similaires

  1. Supprimer le contenu d'une ComboBox
    Par spunk62 dans le forum Visual C++
    Réponses: 0
    Dernier message: 12/06/2009, 14h37
  2. supprimer le contenu d'une JList
    Par info.men dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2009, 21h51
  3. Supprimer/Remplacer contenu d'une iframe
    Par devoluti0n dans le forum Langage
    Réponses: 5
    Dernier message: 03/05/2008, 10h34
  4. supprimer le contenu d'une colone
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2008, 15h02
  5. Réponses: 2
    Dernier message: 06/04/2007, 12h17

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