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

GdkPixbuf 的申请与释放

2014年02月11日 ⁄ 综合 ⁄ 共 1346字 ⁄ 字号 评论关闭

最近,在用GTK在线程中显示图片,当

         GdkPixbuf *pixbuf;
          pixbuf=gdk_pixbuf_new_from_file("X.jpg",NULL);

          delete pixbuf;//释放不掉。之后内存占用渐渐增至100%。崩溃,死机。

经过调查原因是

GdkPixbuf structures are reference counted. This means that an
application can share a single pixbuf among many parts of the code. When
a piece of the program needs to keep a pointer to a pixbuf, it should
add a reference to it by calling g_object_ref(). When it no longer needs
the pixbuf, it should subtract a reference by calling g_object_unref().
The pixbuf will be destroyed when its reference count drops to zero.
Newly-created GdkPixbuf structures start with a reference count of one.

Note
As GdkPixbuf is derived from GObject now, gdk_pixbuf_ref() and
gdk_pixbuf_unref() are deprecated in favour of g_object_ref() and
g_object_unref() resp.

Finalizing a pixbuf means to free its pixel data and to free the
GdkPixbuf structure itself. Most of the library functions that create
GdkPixbuf structures create the pixel data by themselves and define the
way it should be freed; you do not need to worry about those. The only
function that lets you specify how to free the pixel data is
gdk_pixbuf_new_from_data(). Since you pass it a pre-allocated pixel
buffer, you must also specify a way to free that data. This is done with
a function of type GdkPixbufDestroyNotify. When a pixbuf created with
gdk_pixbuf_new_from_data() is finalized, your destroy notification
function will be called, and it is its responsibility to free the pixel
array.

 

refrence from:http://www.linuxfans.org/bbs/thread-62574-1-1.html

【上篇】
【下篇】

抱歉!评论已关闭.