我目前正在c中函数指针的方向上进行一些探索,并且我模拟了一个我认为应该可行的小例子,但它反而产生了分段错误,我不太确定为什么。
这是我模拟的代码
void *new_testarr()
{
void *testarr = malloc(4*sizeof(int));
return testarr;
}
void *test_wrap(void *(*functionpointer)(void))
{
return (*functionpointer);
}
int main(int argc, char const *argv[])
{
int *arr = (int *) test_wrap(new_testarr);
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
for (int i = 0; i < 4; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
我单独测试了函数 new_testarr() ,没有问题,但是一旦我尝试包装它,就会出现分段错误。我还尝试在 test_wrap() 中传递函数时添加一个 & 符号,但发生了同样的事情。
任何指导将不胜感激。
return (*functionpointer);
正在获取函数指针并将其作为 void*
返回,这是不允许的。我认为你的意思是写 return (*functionpointer)();
- 通过其指针调用该函数。