Vala中的Gdk.Pixbuf内存泄漏还是其他什么?

时间:2010-09-13 18:04:05

标签: memory gtk memory-leaks vala

这是一个简单的问题。你能帮我找一下这个Vala代码中的内存泄漏吗? 如果有帮助我也可以发布生成的c代码^^

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;
}

1 个答案:

答案 0 :(得分:1)

我在最新版本的Vala(0.10.1和0.11.1)上重现了这一点。我已经查看了.c代码valac生成并且没有看到明显的问题,虽然很明显pixbuf正在泄漏(valgrind证实了这一点)。我在这里报告了一个错误:

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

更新:错误已关闭。调查显示本身没有内存泄漏,但(很可能)内存正在被子分配器或某些内容释放时被分配和保留。正如Evan所指出的,如果你在一个循环中调用测试函数,总内存大小永远不会超过90MB,表明内存泄漏。