【发布时间】:2011-02-24 02:58:21
【问题描述】:
这是我的第一篇文章,所以请温柔。
过去我一直在玩弄 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 个空格才能正确格式化。
-
使用编辑页面上的
101010按钮将标记的文本转换为代码。 -
你需要在 __engine_allocate_vec 中使用双重间接
标签: c