2010-09-13 16 views
1

Voici une question simple. Pouvez-vous m'aider à trouver la fuite de mémoire dans ce code Vala? Si elle aide je peux poster le code généré c trop ^^Gdk.Pixbuf fuite de mémoire dans Vala, ou autre chose?

using GLib; 
using Gtk; 
using Gee; 

void test1() 
{ 
    Gee.ArrayList<Gdk.Pixbuf> list = new Gee.ArrayList<Gdk.Pixbuf>(); 

    for(int a = 0; a < 10000; a++) 
    { 
     string path = "/usr/share/icons/gnome/48x48/stock/data/stock_lock.png"; 

     list.add(new Gdk.Pixbuf.from_file(path)); 
    } 

    list.clear(); 

    // when the function returns it *should* free all alocated memory, or am I missing something?    
} 

int main (string[] args) 
{ 
    Gtk.init(ref args); 

    // the memory usage here is ~3mb 
    test1(); 
    // here it is ~94mb 

    Gtk.main(); 
    return 0; 
} 
+0

Avez-vous essayé d'exécuter le programme sous valgrind? Voir http://valgrind.org/docs/manual/quick-start.html pour un exemple. –

Répondre

1

J'ai reproduit ce sur les dernières versions de Vala (0.10.1 et 0.11.1). J'ai regardé le code .c généré par valac et je n'y vois pas de problème évident, bien qu'il soit évident que les pixbufs fuient (valgrind le confirme). Je l'ai signalé comme un bug ici:

https://bugzilla.gnome.org/show_bug.cgi?id=633869

Mise à jour: Le bogue est fermé. L'enquête montre qu'il n'y a pas de fuite de mémoire en soi, mais (très probablement) que la mémoire est allouée et maintenue quand elle est libérée par un suballocator ou quelque chose comme ça. Comme Evan l'a fait remarquer, si vous appelez la fonction de test dans une boucle, la taille totale de la mémoire ne dépasse jamais 90 Mo, indiquant que c'est et non une fuite de mémoire.