直接代码:
#define PRO_SIGNAL( func, param ) (*func)(param)
void PRO_SIGNAL( paint[0], Pro_Window* );
signal->paint = realloc( signal->paint, sizeof( void (*)(Pro_Window*) ) * signal->paint_count );
错误:
error: incompatible types when assigning to type 'void (*[])(struct Pro_Window *)' from type 'void *'|
答案 0 :(得分:3)
您似乎正在分配数组而不是指针。
从输出错误消息:
'void (*[])(struct Pro_Window *)' from type 'void *'|
注意那里的[]
(当然不是lambda!)而不是*
如果这是一个“可扩展”的结构,你需要重新分配整个结构而不仅仅是数组成员。
顺便说一句,提示:如果realloc失败,它返回一个NULL指针,如果你将它分配给正在重新分配的变量,它指向的原始内存将永远丢失。所以总是首先重新分配到temp,检查值,然后分配回原始指针(如果有效)。
答案 1 :(得分:1)
您没有向我们展示singal->paint
的定义,但我从错误消息中推断出它被声明为函数指针数组,这意味着signal
是一个struct
flex数组(paint[]
)。您无法分配给数组,您需要重新分配整个struct
。
答案 2 :(得分:0)
不确定你要做什么,但这在这里运作得很好:
#include <stdlib.h>
int main(int argc, char ** argv)
{
void (**foobar) (int a, int b);
void (**tmp) (int a, int b);
foobar = NULL;
if (!(foobar = malloc(sizeof(*foobar)*4))
return 1;
if (!(tmp = realloc(foobar, sizeof(*foobar)*5)) {
free(foobar);
return 1;
} else {
foobar = tmp;
}
free(foobar);
return 0;
}
所以,你要么像凯文所说的那样尝试realloc
一个数组,要么就是你在C ++模式下进行编译,我相信这些模型不是隐含的。
编辑:我添加了一些错误处理。