2012-02-01 76 views
1

直奔代碼:如何重新分配一個函數指針數組?

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

回答

3

看起來你正在給數組賦值而不是指針。

從您的輸出錯誤信息:

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

注意[]在那裏(和它肯定不是一個lambda!),而不是*

如果這是一個「可擴展」結構你需要重新分配整個結構體而不僅僅是數組成員。順便提一句,如果realloc失敗,它將返回一個NULL指針,如果將它指定給被重新分配的變量,它指向的原始內存將永遠丟失。所以總是首先將它重新分配到一個temp中,然後檢查這個值,然後在原始指針返回時返回它。

1

你不告訴我們的singal->paint的定義,但我從它被聲明爲功能的陣列錯誤信息推斷指針,意思是signal是帶有柔性陣列的structpaint[])。你不能分配給一個數組,你需要重新分配整個struct

+0

對不起,我忘了提及這個,但聲明paint [0]實際上是在signal的結構中。 – ApprenticeHacker 2012-02-01 17:23:30

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++編譯模式,在那裏我相信演員並不隱含。

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

+0

看看CashCow的提示。使用foobar作爲realloc的參數並將其設置爲realloc的返回值是一個糟糕的主意。 – 2012-02-01 22:15:49

相關問題