2010-09-13 1 views
1

здесь простой вопрос. Можете ли вы помочь мне найти утечку памяти в этом коде Vala? Если это поможет, я могу отправить сгенерированный код С тоже ^^Ошибка утечки памяти Gdk.Pixbuf в Вала или что-то еще?

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

Вы пытались запустить программу под valgrind? См. Http://valgrind.org/docs/manual/quick-start.html для примера. –

ответ

1

Я воспроизвел на последние версии Вала (0.10.1 и 0.11.1). Я просмотрел .c код valac генерирует и не видит там очевидной проблемы, хотя очевидно, что pixbufs протекают (valgrind подтверждает это). Я сообщил об этом как ошибка здесь:

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

Update: Исправлена ​​ошибка закрыта. Исследование показывает, что утечка памяти сама по себе отсутствует, но (скорее всего), что память выделяется и удерживается, когда она освобождается субаллокатором или некоторым из них. Как отметил Эван, если вы вызываете тестовую функцию в цикле, общий объем памяти никогда не превышает 90 МБ, указывая, что не утечка памяти.

Смежные вопросы