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

时间:2013-12-05 23:22:28

标签: c arrays pthreads sieve-of-eratosthenes

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

typedef struct parallel{
unsigned long first, second;
}Parallel;

return final_array;

}

2 个答案:

答案 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之后ary1array1 = ary1将包含线程返回的值,{{1}}就足以使其有用(不需要强制转换)。

(作为ldav1s noted,大小也是错误的。你可能想要扩充代码以返回多于一个指针。或者你可以填写线程调用者提供的数据结构。[我是这里做了各种关于如何实现多线程的猜测。猜测可能是错误的。:-)])