[英]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數組的struct
( paint[]
)。 您不能分配給數組,需要重新分配整個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.