使用pthread_create

时间:2017-11-29 04:40:30

标签: c multithreading memory struct pthreads

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

csvSearch以(void *)作为参数,当将指针强制转换为指向结构的指针时,不知怎的,我丢失了存储在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都填充了空字符。

我的语法中有些不正确吗?或者你不能以这种方式将信息传递给新线程中的函数吗?

0 个答案:

没有答案