这是我的第一篇文章,所以请温和。声明,分配和分配指向函数指针的指针数组
我以前一直在玩C。现在我已经开始了一个真正的项目(使用SDL的2D图形引擎,但这与问题无关),可以说我拥有一些真正的C经验。昨天,在参与事件系统的工作时,我遇到了一个我无法解决的问题。
有这样的typedef,
//the void parameter is really an SDL_Event*.
//but that is irrelevant for this question.
typedef void (*event_callback)(void);
指定一个函数的签名进行发动机事件被调用。
我希望能够支持多个event_callbacks,所以这些回调数组是一个想法,但不想限制回调的数量,所以我需要某种动态分配。这是问题出现的地方。我第一次尝试是这样的:
所有的
//initial size of callback vector
static const int initial_vecsize = 32;
//our event callback vector
static event_callback* vec = 0;
//size
static unsigned int vecsize = 0;
void register_event_callback(event_callback func) {
if (!vec)
__engine_allocate_vec(vec);
vec[vecsize++] = func; //error here!
}
static void __engine_allocate_vec(engine_callback* vec) {
vec = (engine_callback*) malloc(sizeof(engine_callback*) * initial_vecsize);
}
首先,我省略了一些错误检查,以及为重新分配回调矢量时回调的数量超过矢量大小不同的代码。
但是,当我运行此代码时,程序崩溃,如代码中所述。我猜分段错误,但我不能确定,因为没有输出。我也猜测这个错误来自于对如何声明和分配一个指向函数指针的指针数组有点有缺陷的理解。
请堆栈溢出,指导我。
编辑:我似乎无法掌握如何缩进代码块。这几乎是一个尴尬...
编辑:没关系的。检查了其他一些帖子的页面源代码=)。
你必须通过4个空格缩进的代码,它被正确格式化。 – Artefacto 2010-05-26 10:43:53
使用编辑页面上的'101010'按钮将标记文本转换为代码。 – sbi 2010-05-26 10:44:11
在__engine_allocate_vec中需要双重间接 – Artefacto 2010-05-26 10:46:34