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 <vnig...@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 <vnig...@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 _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list