Jed I
Jed I

Reputation: 1038

c pthread passing array of type int

I am passing an array of type int pthread_create and getting error:

  histogram.c:138:3: warning: passing argument 3 of
 ‘pthread_create’ from incompatible   pointer type [enabled by default]
  expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(int *)’

  void *output_results();
  pthread_create(&t2, NULL, output_results, (void *)bins);

  void *output_results(int *bins) {
      some code
  }

Upvotes: 1

Views: 4714

Answers (2)

Brian Cain
Brian Cain

Reputation: 14619

The compilation error is because pthread_create expects void *output_results(void *bins), but you have int *bins.

Also, the declaration of output_results you're using does not match its definition.

Upvotes: 0

Simon
Simon

Reputation: 32943

Should be

void *output_results(void*);
pthread_create(&t2, NULL, output_results, (void *)bins);

void *output_results(void *data) {
    int *bins = (int*)data;
    // some code
}

The error message is pretty clear: the function should be of type void * (*)(void *) and not void * (*)(int *) (plus your prototype for output_results was not matching its definition).

Upvotes: 6

Related Questions