簡體   English   中英

如何重新分配函數指針數組?

[英]How do I realloc an array of function pointers?

直接找到代碼:

#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指針,如果將其分配給正在重新分配的變量,則指向的原始內存將永遠丟失。 因此,請始終先將其重新分配給臨時對象,檢查該值,然后在可行的情況下分配回原始指針。

您沒有向我們展示singal->paint的定義,但是我從錯誤消息中推斷出它已聲明為函數指針數組,這意味着signal是具有flex數組的structpaint[] )。 您不能分配給數組,需要重新分配整個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;
}

所以,要么你想realloc像凱文說,一個陣列,或者也許你正在編譯的C ++模式,在這里我認為,中投不隱。

編輯 :我添加了一些錯誤處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM