Re: GList strange behavior



Hi,

Seem you did not read my reply clearly. I told you the behaviour of
g_list_append() and g_list_last() there.
Okay, so your question is (

"So, why g_list_append() dont' return me newly created list???"

If you pass NULL pointer to first arg of g_list_append() it will
returns a newly created list for you, save the address to the return
pointer. If you pass non NULL pointer (already created list) to first
arg of g_list_append() it will ALWAYS return the HEAD of the list and
will not create a new list.

It's better for you to read GList implementation source code.
(glist.c) to fully understand how it work.

Regards.


On Thu, Aug 16, 2012 at 2:08 AM, Vlasov Vitaly <vnigtha gmail com> wrote:
Hello
Thanks for answer.

        > Did you mean Last list element: 0x832c610 is differ from INIT list
prt: 0x830f080?
 No.

Lest's see...
i got function "do_work" with:
        1. new Glist init with random data
        2. callback definition of button click: button_click(...., GList *list)
let init list poiner = 0xfe
button was clicked!
Here button_click(GList *list)
        list in agrs = 0xfe
        new data record memory allocation.
        !!! g_list_append(data, list) !!!
        In my example it returns init list value (0xfe), but should returns value
of newly created list (0x832c610 in example).

        In example:
                INIT list prt: 0x830f080 - this is init list, which passed to
button_callback
                In button callback:
                Created: 0x830f080, arg: 0x830f080 - first ptr is returned list from
g_list_append(), but it equal to init list. WTF??? HOW?? I need newly created
list here...
                And i check added value with g_list_last(). It's equal 0x832c610 and
correct.

So, why g_list_append() dont' return me newly created list???

В сообщении от Среда 15 августа 2012 09:33:04 вы написали:
Hi,

In button_cb()...

Did you mean Last list element: 0x832c610 is differ from INIT list
prt: 0x830f080?

It's clear because  0x830f080 was the location of first list and
0x832c610 is the last appended list.
g_list_prepend() return to the start of the list, g_list_last() return
the last of the list (address).

in test_glist()

First you call temp = g_list_insert(test, ...), test = NULL, save the
list to temp pointer to GList,
second, you call temp = g_list_append(test, ...), nothing wrong with
that code! BUT if you suppose to insert 2nd list here, then you are
wrong. Because, test is STILL NULL. It returns the newly allocated
list again, that's why it's differ. You should call call temp =
g_list_append(temp,...) or to insert the next list.

In real program, i need to get newly created list pointer in function
like button_cb(), but don't know how to do it.

Just pass it through callback's argument or declare it as global variable.

On Wed, Aug 15, 2012 at 8:04 AM, Vlasov Vitaly <vnigtha gmail com> wrote:
Hi, list.

        I can't understand, why g_list_append return different values in
        my

callback's(please read source). In first case i got same list, which was
obtained from arguments. In second case g_list_append returns newly
created list.
Why result's is are not the same?

In real program, i need to get newly created list pointer in function
like button_cb(), but don't know how to do it.

source: http://pastebin.com/4gMREKwd

output on my laptop:
INIT list prt: 0x830f080
Created: 0x830f080, arg: 0x830f080
Last list element: 0x832c610
Init list ptr: 0x832c5c0
Second list ptr: 0x830f120
End
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]