首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何重新分配函数指针数组?

如何重新分配函数指针数组?
EN

Stack Overflow用户
提问于 2012-02-02 01:03:05
回答 3查看 435关注 0票数 1

直接进入代码:

代码语言:javascript
运行
复制
#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 );

错误:

代码语言:javascript
运行
复制
error: incompatible types when assigning to type 'void (*[])(struct Pro_Window *)' from type 'void *'|
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-02 01:46:06

看起来你赋值给一个数组,而不是一个指针。

从您的输出错误消息:

代码语言:javascript
运行
复制
'void (*[])(struct Pro_Window *)' from type 'void *'| 

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

如果这是一个“可扩展”的结构,你需要重新锁定整个结构,而不仅仅是数组成员。

顺便提一下,提示:如果realloc失败,它会返回一个空指针,如果你将它赋值给被重新分配的变量,它所指向的原始内存将永远丢失。所以,总是先重新分配到一个temp中,检查它的值,然后赋值回原来的指针,如果它有效的话。

票数 3
EN

Stack Overflow用户

发布于 2012-02-02 01:08:29

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

票数 1
EN

Stack Overflow用户

发布于 2012-02-02 01:14:00

不知道你想要做什么,但这在这里非常有效:

代码语言:javascript
运行
复制
#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++模式下编译,我相信这种转换不是隐式的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9099973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档