2012-03-28 129 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]); 

演員,順便說一句,是毫無意義的。