将结构传递给接受void *参数的函数时出现问题

时间:2015-04-29 12:31:45

标签: c pointers struct parameter-passing void

我想调用类型为foo(void * data)的函数,其输入参数为struct变量。

我听说当输入格式为void类型时,它接受每种类型的输入变量类型。不过,我收到一条错误消息。

struct info{
    int element;
};

struct info inserter_info;
inserter_info.element = 0;

inserter(inserter_info);

inserter()原型为void * inserter(void * data)

我尝试过投射但是我也收到了错误消息。

2 个答案:

答案 0 :(得分:1)

void *data期待一个指针

下面:

struct info inserter_info;
inserter_info.element = 0;
inserter(inserter_info);

你没有传递指针,改为:

inserter(&inserter_info);

答案 1 :(得分:1)

它需要一个指针,但是你没有传递一个指针,如果inserter()函数要在另一个线程中运行你需要在堆上分配结构,否则它将在线程时被释放启动。

struct info {
    int element;
};

struct info *inserter_info;
inserter_info = malloc(sizeof(*inserter_info));
if (inserter_info == NULL)
    abortThisOperation();
inserter_info->element = 0;

inserter(inserter_info);

你应该确保当线程完成工作时你将释放分配的指针。

如果该函数不会从另一个线程运行,那么就像这样传递结构的地址

struct info inserter_info;
inserter_info.element = 0;

inserter(&inserter_info);

就够了。