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)
//只要是入口参数和出口参数是同类型的,不要用相同的实体去调用,
//否则,会多出一份内存拷贝,这样内存会被源源不断的吃掉
|