我写了这个小程序来读取用户的两个数字并使用线程函数计算它们的总和,该函数还负责在屏幕上显示结果。
int global[2];
void *sum_thread(void *arg)
{
int *args_array;
args_array = *(int**)arg;
int n1,n2,sum;
n1=args_array[0];
n2=args_array[1];
sum = n1+n2;
printf("N1 + N2 = %d\n",sum);
return NULL;
}
int main()
{
printf("First number: ");
scanf("%d",&global[0]);
printf("Second number: ");
scanf("%d",&global[1]);
pthread_t tid_sum;
pthread_create(&tid_sum,NULL,sum_thread,(void*)&global);
pthread_join(tid_sum,NULL);
return 0;
}
但是,当我运行代码时,由于分段错误,它无法正常工作。我想我正在尝试访问/使用未分配的内存。我应该用malloc分配它还是其他我做错了?
答案 0 :(得分:2)
数组的名称local found = false
for _, v in ipairs(fruits) do
if v == value then
found = true
break
end
end
if not found then
print ( value .. " is not a fruit" )
end
指向数组的基址。你可以简单地传递它并在你的线程函数中使用它。
但是,仅提一个逻辑点,如果您将global
作为参数传递给global
函数,则它不必是全局。
在您的代码中,更改
sum_thread()
到
pthread_create(&tid_sum,NULL,sum_thread,(void*)&global);
然后,在pthread_create(&tid_sum,NULL,sum_thread,global);
函数
sum_thread()
到
args_array = *(int**)arg;
答案 1 :(得分:0)
您传递(void*)&global
作为线程启动函数的参数。 &global
的类型是(*)int [2] - 指向两个int
数组的指针。这与int **
不同,并且与int
不兼容,void *sum_thread(void *arg)
{
int n1,n2,sum;
n1=global[0];
n2=global[1];
sum = n1+n2;
printf("N1 + N2 = %d\n",sum);
return NULL;
}
是指向{{1}}的指针。数组不是指针。
{{1}}