не может передать структуру через g_timeout_add? - PullRequest
0 голосов
/ 06 февраля 2011

ma дорогие, у меня здесь больше проблем, которые не могли передать структуру через g_timout_add со следующим кодом

$ cat tes.c 
#include <stdio.h>
#include <gtk/gtk.h>


typedef struct a
{
char *kaka;

}a;


gint zzz(a *ati)
{

printf("data after : %s\n",ati->kaka);

return 0;
}

int main(int argc,char* argv[])
{

gtk_init(&argc,&argv);
printf("starting...\n");

a *ati = g_slice_new(a);

ati->kaka = "rempong";

printf("data before : %s\n",ati->kaka);
g_timeout_add(2000,(GSourceFunc)zzz,ati);

g_slice_free(a,ati);

gtk_main();
return 0;
}

скомпилировано:

gcc -o tes tes.c `pkg-config --libs --cflags gtk+-2.0`

работает:

$ ./tes 
starting...
data before : rempong
data after : �W�
^C

Кто-нибудь есть идеи?

1 Ответ

1 голос
/ 06 февраля 2011

Вы освобождаете данные, передаваемые в функцию тайм-аута, прежде чем получите возможность использовать ее:

g_slice_free(a,ati);

Используйте для этого деструкторы (см. G_timeout_add_full ()) или освободите ихобработчик тайм-аута (хотя это делает не все случаи).

...