我正在尝试创建一个运行名为csvSearch的函数的新线程。该函数需要3条信息,因此我将它们放入结构中。
csvSearch以(void *)
作为参数,当将指针强制转换为指向结构的指针时,不知怎的,我丢失了存储在outpath
和column
中的数据,其中两个结构的领域。
这是结构定义:
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->outpath
和input->column
都填充了空字符。
我的语法中有些不正确吗?或者你不能以这种方式将信息传递给新线程中的函数吗?