在我当前的项目中,我在运行程序的主要部分之前进行了一些函数-ptr 收集。
一些代码:
typedef void(*ShutdownFunctionPtr)(void);
static ShutdownFunctionPtr *shutdown_functions;
static unsigned int shutdown_functions_cnt;
/* some stuff */
shutdown_functions = (ShutdownFunctionPtr*) malloc(sizeof(ShutdownFunctionPtr));
shutdown_functions_cnt = 0;
/* a function to put a functionptr into the array */
void put(void (*func)(void)) {
shutdown_functions = (ShutdownFunctionPtr*))realloc(shutdown_functions, sizeof(ShutdownFunctionPtr) * shutdown_functions_cnt+1);
/* put the function and increment shutdown_functions_cnt */
}
最后一行使一切崩溃。我目前使用 MALLOC_CHECK_=1 或更高版本运行程序以获得良好的回溯。但我无法弄清楚问题出在哪里。我调试过,这shutdown_functions
是一个无效的指针,但仅在put()
函数的第二次调用时。第一个电话工作正常!
问候!
编辑:当然,我不会在put()
!
编辑:
正如你想要一个例子
typedef void(*ShutdownFunctionPtr)(void);
static ShutdownFunctionPtr *funcs;
static void foo(void);
static void bar(void);
static void register(void (*func)(void));
static void register(void (*func)(void)) {
funcs = realloc(funcs, sizeof(ShutdownFunctionPtr) * (cnt+1));
funcs[cnt] = func;
cnt++;
}
int main(void) {
funcs = malloc(sizeof(ShutdownFunctionPtr));
register(foo);
register(bar);
}
/* foo and bar somewere */
这就是真正的代码的样子。