c-如何重新分配函数指针数组



直接进入代码:

#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 *'|

似乎您正在为数组而不是指针赋值。

从您的输出错误消息:

'void (*[])(struct Pro_Window *)' from type 'void *'| 

注意这里的[](它肯定不是lambda!)而不是*

如果这是一个"可扩展"结构,则需要重新分配整个结构,而不仅仅是数组成员。

顺便说一句:如果realloc失败,它将返回一个NULL指针,如果您将其分配给正在realloc’ed的变量,它所指向的原始内存将永远丢失。因此,总是先将其重新分配到一个临时指针中,检查值,如果有效的话,再分配回原始指针。

您没有向我们展示singal->paint的定义,但我从错误消息中推断,它被声明为函数指针数组,这意味着signal是带有flex数组(paint[])的struct。不能分配给数组,需要重新分配整个struct

不确定你想做什么,但这在这里非常有效:

#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;
}

所以,要么像Kevin所说的那样尝试realloc一个数组,要么在C++模式下编译,我认为在C++模式中,强制转换不是隐式的。

编辑:我添加了一些错误处理。

相关内容

  • 没有找到相关文章