我不知道在以下功能中我做错了什么。我试图返回一个数组,但它在compute_average中的while循环中出现Seg Faults。我正在使用一个结构来初始化开头和最后一个单词并在函数“compute_average”中使用你可以假设compute_average函数工作正常但已经存在但我在使用结构或“第一”和“第二”时更改了代码值。
typedef struct parallel{
unsigned long first, second;
}Parallel;
return final_array;
}
答案 0 :(得分:1)
此:
unsigned long *array1;
...
size = (sizeof(array1)/sizeof(array1[0]));
看起来非常可疑,除非size
应该是1或2. array1
是指针,而不是数组。
pthread_join(tid, ary1);
应该是:
pthread_join(tid, &ary1);
如果您想要从compute_prime
获取任何数据。您还需要在compute_prime
返回的数据中“添加”某种大小,以告诉您已经有多少元素。
您还在泄漏compute_prime
中分配的内存,更好free(ary1)
。
答案 1 :(得分:1)
你对pthread_join
的争论是错误的。实际上,你是这样做的:
pthread_join(tid, NULL);
您需要提供void *
变量的地址(从技术上讲,您应该捕获pthread_join
本身的返回值,以防它失败,尽管在这里它不会):
error = pthread_join(tid, &ary1);
如果error==0
之后ary1
,array1 = ary1
将包含线程返回的值,{{1}}就足以使其有用(不需要强制转换)。
(作为ldav1s noted,大小也是错误的。你可能想要扩充代码以返回多于一个指针。或者你可以填写线程调用者提供的数据结构。[我是这里做了各种关于如何实现多线程的猜测。猜测可能是错误的。:-)])