LINUX.ORG.RU

[C + GLib] Передача GList в функцию не работает...


0

1

Доброго времени суток есть функция, в которую я передаю указатели на списки. В функции я их заполняю и хочу использовать, но внутри функции они заполняются, после выхода из функции указатель на список всё равно равен NULL:

функция

int db_get_list_data(SQLHANDLE hDbc, LPTSTR szSQL, LPCTSTR szFmt, ...)
{
 . . .
 
 GList *list = va_arg(p_arg, GList *);
 char * data = g_new(char, 256);
 SQLGetData(hStmt, ++iParam, SQL_C_TCHAR, data, 1024, &cb);
 list = g_list_prepend(list, data);
 g_printf("Column: %d ----- %s\n", iParam, list->data);

 . . . 
 return -1;
}

здесь list не пустой, заполнен данными, отладчиком остановился в строчке с return -1, посмотрел вывод в консоли - всё нормально, данные вывелись.

затем вызываю эту функцию в другом месте так:

GList * fid = NULL; 
GList * fname = NULL; 
GList * ftxt = NULL; 

db_get_list_data(hDbc, query, "%s%s%s", fid, fname, ftxt);

т.е я передаю в функцию указатели на списки, в функции их заполняю, и ожидаю что по возвращении из функции они будут заполнены, а они - NULL. ЧЯДНТ? :(

★★★★★

Последнее исправление: xterro (всего исправлений: 1)

а это, батенька потому, что вы нихрена не правильно делаете. то есть man va_args во первых, во вторых, вы не на плюсах пишете, извольте передавать указатель на переменную, которую надо заполнить.


GList * fid = NULL; 
GList * fname = NULL; 
GList * ftxt = NULL; 

db_get_list_data(hDbc, query, "%s%s%s", &fid, &fname, &ftxt);

блаблабла

GList **list = va_arg(p_arg, GList **);
*list = g_list_prepend(*list, data);
ckotinko ☆☆☆
()
Ответ на: комментарий от xterro

>А смысл, если я передаю указатель, это и так адрес... хмм...

Ты передаешь туда NULL, а не адрес.

ttnl ★★★★★
()
Ответ на: комментарий от xterro

ну вы же только внутрь передаете указатель на список, наружу-то он сам по себе не выйдет


void dont_fill_my_x_with_4(int ptr)
{
  ptr=4;
}
void fill_my_x_with_4(int * ptr)
{
  *ptr=4;
}

int x=0;
dont_fill_my_x_with_4(x);
//x=0
fill_my_x_with_4(&x);
//x=4

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

теперь понял, спасибо всем :)

xterro ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.