1

这是一个简单的问题。你能帮我找出这个 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;
}
4

1 回答 1

1

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

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

更新:该错误已关闭。调查表明,本身没有内存泄漏,但(很可能)当内存被子分配器或类似的释放时,内存正在被分配和持有。正如 Evan 所指出的,如果你在循环中调用测试函数,总内存大小永远不会超过 90MB,这表明它不是内存泄漏。

于 2010-11-03T01:11:08.860 回答