2013-10-08 29 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聲明與其定義不符。