什麼我的程序基本上是應該做的是,它需要多個命令行參數,併爲他們每個人的線索。每個線程都分配給一個primeFactors函數,該函數返回一個指向primefactor值的指針。打印多個孩子的返回值
void *primeFactors(void *param)
{
int* p_a = malloc((1000) * sizeof p_a[0]); //arbitrary size, will scale better later
int number = atoi(param);
..... prime factor part .......
p_a[j] = 0; //sentinel value
pthread_exit(p_a);
}
我檢查過,事實上,它返回一個指向所有正確的主要因素的指針。我的主要功能如下所示
int main(int argc, char *argv[])
{
int count = 2; //arbitrary 2 just for the purpose of testing 2 arguments
pthread_t = malloc(count * sizeof(pthread_t));
pthread_attr_t attr;
pthread_attr_init(&attr);
int i;
for (i = 0; i < count; i++)
{
pthread_create(&tid[i], &attr, primeFactors, argv[i+1]);
}
int j;
void *prime_array;
int *p;
for (j = 0; j < count; j++)
{
pthread_join(tid[i], &prime_array);
p = prime_array;
int n = 0;
while (p[n] != 0)
{
printf("%d ", p[n]);
n++;
}
printf("\n");
}
return 0;
}
我檢查這個程序只有一個單一的命令行參數,並沒有對周圍的pthread_join函數代碼迴路和程序工作。當我加入多個線程並打印每個線程的返回值數組時,問題似乎就會出現。當我通過它帶有兩個命令行參數運行像我一直在我得到一個巨大的數字的名單,如果我跑了一個隨機數發生器,而不是尋找素因子。我認爲這個錯誤可能很小,所以我會很感激你的任何建議!
我看不出有什麼明顯的錯誤在你的代碼。我懷疑它在'primeFactors()'中。例如,'p_a [j] = 0中的'j';'不會超出緩衝區?你可以發佈[mcve]嗎? – usr