我的回调结构不起作用

时间:2014-10-05 15:04:44

标签: c struct callback

我有这段代码:

/* ... headers ... */

struct my_callback_struct {

    int data;
    int (*callback_func)(struct my_callback_struct *p, int data);
};

int reg(struct my_callback_struct *p, int data)
{
    return 1;
}

void init(struct my_callback_struct *p)
{
    p->callback_func = ®
}

int main ()
{

    struct my_callback_struct *p;
    init(p);

    printf("%d", p->callback_func(p,12));

    return 0;
}

所以,基本上我尝试用函数" reg"映射p-> callback_func。但是,当我编译它时,它说没有错误,但是分段错误或其他什么。我只返回1来检查它是否有效......

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您根本没有为struct实例分配内存。尝试像

这样的东西
 struct my_callback_struct s;
 init(&s);

 printf("%d", s.callback_func(p,12));

或者在致电malloc之前致电p init

答案 1 :(得分:0)

您需要分配回调结构。写入的代码只是指向它的指针。两个开放是:

struct my_callback_struct p;  // Just "p", not "*p" which is a pointer

这会在堆栈上分配结构。当封闭函数返回时,将不再分配其内存。如果您希望它具有更长的生命周期,您最常使用malloc()来动态分配它:

struct my_callback_struct *p = (my_callback_struct*)malloc( sizeof( my_callback_struct ) );
if ( p == NULL ){
    return -1;     // Indicate failure to allocate
}