我寫了一個小程序,用於從用戶讀取兩個數字,並使用線程函數計算它們的總和,該線程函數還負責在屏幕上顯示結果。使用線程計算兩個數字的總和
int global[2];
void *sum_thread(void *arg)
{
int *args_array;
args_array = *(int**)arg;
int n1,n2,sum;
n1=args_array[0];
n2=args_array[1];
sum = n1+n2;
printf("N1 + N2 = %d\n",sum);
return NULL;
}
int main()
{
printf("First number: ");
scanf("%d",&global[0]);
printf("Second number: ");
scanf("%d",&global[1]);
pthread_t tid_sum;
pthread_create(&tid_sum,NULL,sum_thread,(void*)&global);
pthread_join(tid_sum,NULL);
return 0;
}
但是,當我運行代碼時,由於分段錯誤而無法正常工作。我想我試圖訪問/使用未分配的內存。我應該用malloc來分配還是還有其他的事情我做錯了?
謝謝,完美的工作。爲了真正理解我已經改變了什麼,能否請你解釋一下爲什麼我不需要在將它作爲參數傳遞給線程@SouravGhosh時將其全局化? –
@CarlosPereira這不是關於鑄造_global_,鑄造根本就不是必需的。它會隱含在'C'中。 –
好吧,我現在明白了。這是否適用於我想通過@SouravGhosh的任何類型的參數? –