现在的位置: 首页 > 综合 > 正文

Pixbuf causes memory leak

2013年08月06日 ⁄ 综合 ⁄ 共 884字 ⁄ 字号 评论关闭

Pixbuf的几个函数很容易造成内存泄露 

 

n原因很简单:
npix_buf = gdk_pixbuf_add_alpha(pix_buf, TRUE, 0xff, 0x00, 0xff);
n不能使用同一个指针,不然在内存中会多拷贝一份内存出来;
n在释放内存时,只会释放一次内存
 

if (pix_buf!= NULL)
{
    g_object_unref(pix_buf);
    pix_buf= NULL;
}

 

n所以会有一份内存没有释放掉!!
 
 

如何解决呢?传不同的指针就行

 

GdkPixbuf* pixbuf = NULL;
GdkPixbuf* tmp_pixbuf = NULL;
tmp_pixbuf = …; // get pixbuf
pix_buf = gdk_pixbuf_add_alpha(tmp_pixbuf, TRUE, 0xff, 0x00, 0xff);
if (tmp_pixbuf!= NULL) // after using tmp_pixbuf, free it.
{
    g_object_unref(tmp_pixbuf);
    tmp_pixbuf= NULL;
}
//after using pixbuf, free it.
if (pixbuf!= NULL)
{
    g_object_unref(pixbuf );
    pixbuf= NULL;
}

  Pixbuf 的另外几个函数也要注意这样的问题:

  

//对这个函数使用同一个指针,会导致system crash
GdkPixbuf*
gdk_pixbuf_new_subpixbuf (GdkPixbuf *src_pixbuf,
                          int        src_x,
                          int        src_y,
                          int        width,
                          int        height)
//只要是入口参数和出口参数是同类型的,不要用相同的实体去调用,
//否则,会多出一份内存拷贝,这样内存会被源源不断的吃掉

抱歉!评论已关闭.