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
有人有任何想法吗?
答案 0 :(得分:1)
在您进行更改以使用它之前,您将释放传递给超时功能的数据:
g_slice_free(a,ati);
为此使用析构函数(请参阅g_timeout_add_full()),或在超时处理程序中释放它(尽管这样做并不能处理所有情况)。