我有这段代码:
/* ... 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来检查它是否有效......
我做错了什么?
答案 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
}