2012-03-28 84 views
2

我有一个结构数组,我打算将数组的每个元素传递给for循环中的单独pthread。难以通过pthread_create传递结构

这里是我的结构:

struct arrayData{ 
int *a; 
int *b; 
int up, low; 

}

这里是指向第一个结构和一个malloc(说不上来,如果我完全得到什么放在这里):

struct arrayData * instance; 
     instance = malloc(sizeof(struct arrayData)*n); 

这里的我致电pthread_create:

pthread_create(&thread[i], NULL, add, (void *)instance[i]); 

而对于该行,我收到消息“无法转换为指针类型”。

该行有什么问题?

回答

5

您正尝试将结构转换为最后一个参数中的指针。您需要将该结构的地址与&一起传递。

pthread_create(&thread[i], NULL, add, &instance[i]); 

作为Jørgensen的mentioned,所述void *铸造是不必要的。

+0

非常好!谢谢。因为我太生锈了,所以今年夏天需要打C版的书。为什么我仍然得到一条警告,说“从不兼容的指针类型传递'pthread-create'的参数3”。 – Chucky 2012-03-28 19:11:51

+0

你的'add'函数的签名是什么? – 2012-03-28 19:14:52

+0

“void * add(void * arg){” – Chucky 2012-03-29 07:32:45

2

instance的类型为struct arrayData *,因此instance[i]的类型为struct arrayData,它是一个聚合,而不是指针。预期用途可能是

pthread_create(&thread[i], NULL, add, &instance[i]); 

演员,顺便说一句,是毫无意义的。