从C中的线程从数组返回?

从C中的线程从数组返回?,c,arrays,pthreads,sieve-of-eratosthenes,C,Arrays,Pthreads,Sieve Of Eratosthenes,我不知道我在下面的函数中做错了什么。我试图返回一个数组,但它在计算平均值的while循环中出现Seg错误。我正在使用一个结构来初始化开始和最后一个单词,并在函数“compute_average”中使用。您可以假设compute_average函数工作正常,它已经存在,但我在使用该结构或“first”和“second”值时更改了代码 }这是: unsigned long *array1; ... size = (sizeof(array1)/sizeof(array1[0])); 看起来非常可疑

我不知道我在下面的函数中做错了什么。我试图返回一个数组,但它在计算平均值的while循环中出现Seg错误。我正在使用一个结构来初始化开始和最后一个单词,并在函数“compute_average”中使用。您可以假设compute_average函数工作正常,它已经存在,但我在使用该结构或“first”和“second”值时更改了代码

}这是:

unsigned long *array1;
...
size = (sizeof(array1)/sizeof(array1[0]));
看起来非常可疑,除非
size
应该是1或2<代码>数组1是指针,而不是数组

pthread_join(tid, ary1);
应该是:

pthread_join(tid, &ary1);
如果您想从
compute\u prime
获取任何数据。您还需要在从
compute\u prime
返回的数据中“附加”某种大小,以告诉您有多少个元素


您还泄漏了在
compute\u prime
中分配的内存,better
free(ary1)
您对
pthread\u join
的参数是错误的。实际上,您正在这样做:

pthread_join(tid, NULL);
您需要提供
void*
变量的地址(从技术上讲,您应该捕获
pthread\u join
本身的返回值,以防它失败,尽管这里不会):

如果在此之后
error==0
ary1
将包含从线程返回的值,并且
array1=ary1
将足以使其有用(不需要强制转换)


(同样,大小也是错误的。您可能希望增加代码以返回多个指针。或者您可以填写线程调用方提供的数据结构。[我在这里对如何实现多个线程进行了各种猜测。这些猜测可能是错误的。:-])
compute\u prime
被定义为
void
,但有一个返回值。我认为这不是问题。检查第9页@jucestain compute_prime返回
void*
,这对于线程来说很正常。不,它被定义为void*,因此它返回一个指针。除了下面的答案,您意识到线程在这个实现中完全不能为您带来任何东西,对吗?我尝试过:size=(sizeof(*array1)/sizeof(&array1[0])不起作用。@user3022651大小为(或者至少最好是)
last-first
从您的
parallel
结构中。现在,我得到了:**glibc检测到***p:free():无效的下一个大小(fast):0x00000000025b0130*********glibc检测到***p:free():无效指针:0x00000000025b0150***这可能是由于在主线程中使用了错误的大小。给定当前代码,只需以与计算线程相同的方式使用
parallel
中的值即可。
pthread_join(tid, NULL);
error = pthread_join(tid, &ary1);