C-使用线程计算两个数字的总和



我有一个我写的小程序,我写了从用户中读取两个数字并使用线程函数计算其总和,这也负责在屏幕上显示结果。

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 = %dn",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分配它还是我做错了什么?

数组的名称, global指向数组的基础地址。您可以将其传递并在线程功能中使用相同的内容。

但是,仅提及一个逻辑点,如果您将global作为参数传递给sum_thread()函数,则不必是 global

在您的代码中,更改

pthread_create(&tid_sum,NULL,sum_thread,(void*)&global);

to

pthread_create(&tid_sum,NULL,sum_thread,global);

然后,在sum_thread()功能

args_array = *(int**)arg;

to

args_array = arg;

您将 (void*)&global作为线程启动函数的参数。&global的类型为(*)int [2] - 指向两个int的数组。与int **不同,这是指向int指针的指针。阵列不是指针。

@souravghosh已经提供了一种解决方案,可以正确打字,并且应该正常工作。但是,我观察到,在这种特殊情况下,将指针传递到全局数组有点愚蠢,因为该线程可以直接读取数组:

void *sum_thread(void *arg)
{
    int n1,n2,sum;
    n1=global[0];
    n2=global[1];
    sum = n1+n2;
    printf("N1 + N2 = %dn",sum);
    return NULL;
}

相关内容

  • 没有找到相关文章

最新更新