2013-10-08 25 views
0

我传递int类型在pthread_create的数组,并收到错误:ç并行线程传递int类型的数组

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 
    } 

回答

2

应该

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

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

的错误信息是非常明确的:功能应该是类型void * (*)(void *)而不是void * (*)(int *)(加上您的原型output_results与其定义不符)。

+0

没想到,为什么没有在pthread_create中投射? –

+0

您正在投射'pthread_create'的第四个参数,而问题是关于第三个:函数指针。 'pthread_create'的原型需要第三个参数是'void *(*)(void *)'类型。 – Simon

0

编译错误是因为pthread_create需要void *output_results(void *bins),但是您有int *bins

此外,您使用的output_results声明与其定义不符。