我试图找到多个数字的素因式分解。如果用户键入15 80 77,它将为每个输入创建一个线程,并使该线程返回分解矩阵,然后将其打印出来。但是,我收到两个错误。表示错误的代码:取消引用“ void *”指针[Werror]
printf(“%d”,returnValue [r]);
还有一个说错误:无效使用void表达式
printf(“ d”,returnValue [r]);
我对指针并不陌生。任何帮助是极大的赞赏。这也是我的第一个问题,请耐心等待。
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct _thread_data_t {
int tid;
} thread_data_t;
void *runner(void *param);
int main(int argc, char *argv[]) {
pthread_t thr[argc];
pthread_attr_t attr;
int i, rc;
//int *primeFactor;
//primeFactor = (int *)malloc(sizeof(int)*argc);
//thread_data_t thr_data[argc];
printf("Prime Numbers: ");
//Get the default attributes
pthread_attr_init(&attr);
//creat the thread
for(i = 0; i < argc; ++i){
//thr_data[i].tid = i;
if ((rc = pthread_create(&thr[i],&attr,runner,argv[i]))){
fprintf(stderr, "error: pthread_create, rc: %d\n", rc);
return EXIT_FAILURE;
}
}
//Wait for the thread to exit
for(i = 0; i<argc; ++i){
void *returnValue;
int r = 0;
pthread_join(thr[i], &returnValue);
for(r = 0; r < sizeof(returnValue); r++){
printf("%d ", returnValue[r]);
}
}
printf("\nComplete\n");
}
//The Thread will begin control in this function
void *runner(void *param) {
int *primeFactors;
int num = atoi(param);
primeFactors = (int *)malloc(sizeof(int)*num);
int i, j, isPrime;
int k = 0;
for(i=2; i<=num; i++)
{
if(num%i==0)
{
isPrime=1;
for(j=2; j<=i/2; j++)
{
if(i%j==0)
{
isPrime = 0;
break;
}
}
if(isPrime==1)
{
primeFactors[k] = i;
k++;
}
}
}
//Exit the thread
// pthread_exit(0);
// pthread_exit((void *)primeFactors);
pthread_exit(primeFactors);
}
最佳答案
您在代码段中犯了两个错误。argc
函数中的main
包含许多命令行参数,包括脚本名称。因此,您不想将第一个命令行参数解析为整数值。sizeof
中的for(r = 0; r < sizeof(returnValue); r++)
运算符为您提供returnValue
变量的字节数,在64位OS中,该值应始终为8,因为它是指针值。使用其他方法获取结果数组的大小。
您收到的警告是由于类型滥用。进行显式类型转换以修复它。
关于c - POSIX返回并打印数组prthread_join()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49102757/