2012-03-28 2 views
2

구조체의 배열을 가지고 있으며 배열의 각 요소를 for 루프의 개별 pthreads로 전달하려고합니다.구조체를 pthread_create로 전달하는 데 어려움이 있습니다.

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

}

여기 (I 매우 여기에가는 것을 얻을 경우 몰라) 첫 번째 구조체와의 malloc에 ​​대한 포인터입니다 :

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

을 여기 여기

내 구조체의 pthread_create에 대한 나의 전화 :

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

그리고 그 줄에서 "포인터 유형으로 변환 할 수 없습니다"라는 메시지가 나타납니다.

해당 줄에 무엇이 잘못되었을 수 있습니까?

답변

5

struct를 마지막 매개 변수의 포인터로 변환하려고합니다. 구조체 주소를 &으로 전달해야합니다. Jørgensen은 mentioned으로

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

void * 캐스트가 필요하지 않습니다.

+0

우수! 고맙습니다. 이번 여름에 나는 녹슨 너무 책을 칠 필요가있다. 왜 내가 "pthread-create '의 인수 3을 호환되지 않는 포인터 타입에서 넘겨 주겠다고 말하는 줄에 대해 경고를받을 수 있습니까? – Chucky

+0

'add' 함수의 서명은 무엇입니까? –

+0

"void * add (void * arg) {" – Chucky

2

instance 그러므로 instance[i] 집계 아니라 포인터 형 struct arrayData,이다 입력 struct arrayData *이다. 의도 된 사용은 아마도

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

이었습니다. 캐스트는 btw가 무의미합니다.

관련 문제