【发布时间】:2019-03-03 16:19:14
【问题描述】:
我一直试图从一个线程中取回一个整数数组。我想我真的很接近了。我得到的错误是关于在此处取消引用 void 指针和无效使用 void 表达式
assn3.c:29:29: 错误:取消引用‘void *’指针 [-Werror]
printf(" %d", (int)answer[j]);
^
assn3.c:29:18: 错误:无效表达式的使用
printf(" %d", (int)answer[j]);
我尝试将函数的返回类型更改为 int*,但它似乎不喜欢那样。我在这里错过了什么?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *getFactors(void *param);
int main(int argc, char *argv[])
{
for(int i = argc; i > 0; i--)
{
void *answer;
pthread_t tid;
pthread_attr_t attr;
if (atoi(argv[i])<0)
{
fprintf(stderr, "%d must be > 0\n", atoi(argv[i]));
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid, &attr, getFactors, argv[i]);
pthread_join(tid, &answer);
printf("%d", atoi(argv[i]));
printf(":");
for(int j = 0; j < sizeof(answer); j++)
{
printf(" %d", (int)answer[j]);
}
printf("\n");
}
}
还有线程函数
void *getFactors(void *param)
{
int a[10];
int n = atoi(param);
int i = 0;
while (n%2 == 0)
{
a[i] = 2;
n/=2;
i++;
}
int f=3;
while (f * f <= n)
{
if (n % f == 0)
{
a[i]=f;
n /= f;
i++;
}
else
{
f += 2;
}
}
if (n<1)
{
a[i]=n;
i++;
}
int* buffer = (int*) malloc(i);
buffer = a;
return (void *) buffer;
pthread_exit(0);
}
【问题讨论】: