我正在尝试创建一个运行名为csvSearch的函数的新线程。该函数需要3条信息,因此我将这些信息放入了一个结构中。

csvSearch将(void *)作为其参数,当将该指针转换回指向该结构的指针时,我不知何故丢失了存储在structt的两个字段outpathcolumn中的数据。

这是结构定义:

typedef struct {
    char path[256];
    char outpath[256];
    char column[32];
} Data;

创建线程时,我使用了以下代码
Data *data = malloc(sizeof(Data *));

strcpy(data->path, path);
strcpy(data->outpath, outpath);
strcpy(data->column, column);

pthread_create(&threads[threadCount], NULL, csvSearch, data);

这是csvSearch的摘要,我正在尝试调用此函数
void *csvSearch(void * data){

    Data * input = (Data *) data;

    char * path = input->path;
    char * outpath = input->outpath;
    char * column = input->column;

//path is the correct string, but outpath and column are both empty strings
}

我已经使用gdb对其进行了广泛的测试,但未能找到问题。我知道直到pthread_create为止,数据都包含正确的信息,并且当将其强制转换回Data *时,我得到相同的内存地址和大小,但是input->outpathinput->column都填充了空字符。

我的语法有误吗?还是不能以这种方式在新线程中将信息传递给函数?

最佳答案

Data *data = malloc(sizeof(Data *));

正在为Data*而不是Data分配内存。您需要
Data *data = malloc(sizeof(Data));

10-06 11:25