我正在尝试创建一个运行名为csvSearch的函数的新线程。该函数需要3条信息,因此我将这些信息放入了一个结构中。
csvSearch将(void *)
作为其参数,当将该指针转换回指向该结构的指针时,我不知何故丢失了存储在structt的两个字段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
都填充了空字符。我的语法有误吗?还是不能以这种方式在新线程中将信息传递给函数?
最佳答案
Data *data = malloc(sizeof(Data *));
正在为
Data*
而不是Data
分配内存。您需要Data *data = malloc(sizeof(Data));