不能通过g_timeout_add传递结构?

时间:2011-02-06 01:27:31

标签: struct glib

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 个答案:

答案 0 :(得分:1)

在您进行更改以使用它之前,您将释放传递给超时功能的数据:

g_slice_free(a,ati);

为此使用析构函数(请参阅g_timeout_add_full()),或在超时处理程序中释放它(尽管这样做并不能处理所有情况)。