如何在c中包装返回void *的函数

问题描述 投票:0回答:1

我目前正在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() 中传递函数时添加一个 & 符号,但发生了同样的事情。

任何指导将不胜感激。

c function-pointers
1个回答
0
投票

return (*functionpointer);
正在获取函数指针并将其作为
void*
返回,这是不允许的。我认为你的意思是写 return
(*functionpointer)();
- 通过其指针调用该函数。

© www.soinside.com 2019 - 2024. All rights reserved.