Hi!

On Thu, 18 Aug 2005 00:52:45 -0500
Tristan Sloughter <[EMAIL PROTECTED]> wrote:

> I am using GLists and want to make sure I am freeing all the memory, and 
> not twice or course.
> 
> There are three possible functions for removing an element from the list:
> 
> g_list_remove (GList *list, gconstpointer data);
> g_list_remove_link (GList *list, GList *llink);
> g_list_delete_link (GList *list, GList *link_);
> 
> typedef struct {
>   gpointer data;
>   GList *next;
>   GList *prev;
> } GList;
> 
> So, I want to be sure that /gpointer data/ is freed when I remove the 
> element from the list. If I call/ g_list_remove(...)/ will that take 
> care of freeing data? If so should I use glib allocating functions for 
> allocating the memory that /data/ points to, since it'll probably use 
> /g_free/ to free the /data/, or does it matter?
> 
> What is the difference between /remove_link/ and /delete_link/? If I 
> used /remove_link (...)/ I assume I'd have to free the memory pointed to 
> by /data/ on my own, that being the difference between /remove/ and 
> /remove_link/.
> 
always when you allocate a memory, you need to free it by your self.
to free a list completely you need to free /data/ by your self if it
points to some memory that you allocated. g_list_remove removes an
element from a list and frees that element (but without freeing /data/).
g_list_remove_link removes an element without freeing it, but also sets
next and prev to NULL. 
g_list_delete_link just removes an element without freeing it, but next
and prev still point where they were pointed.

I hope that it is clear :).

regards
-- 
HuamiSoft Hubert Sokolowski
http://www.huamisoft.com/
tel. (085) 7465779
kom. +48501456743
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to