我正在尝试创建一个运行名为 csvSearch 的函数的新线程。该函数需要 3 条信息,因此我将它们放入一个结构中。
csvSearch 将 (void *)
作为其参数,当将该指针转换回指向该结构的指针时,不知何故我丢失了存储在 outpath
中的数据并且列
,结构的两个字段。
这是结构定义:
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));
关于c - 使用 pthread_create 时结构会丢失对变量的跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47545154/