执行加法时使用 pthreads 出现分段错误?

Segmentation fault using pthreads while performing addition?

我正在编写一个程序,基本上对用户给出的两个值执行加法运算。这是我第一次尝试多线程。每当我输入第一个值时,它都会给我 "Segmentation fault (core dumped)" 错误。

void *printSum();

void main()
{
    int *a,*b,*add;
    printf("Enter first number: ");
    scanf("%d",a);                    //error here
    printf("Enter second number: ");
    scanf("%d",b);

    pthread_t thread;
    pthread_create(&thread, NULL, printSum, NULL);
}

void *printSum()
{
    int *a,*b,*add;
    *add = *a + *b;
    printf("Sum = %d", *add);
    pthread_exit(0);
} 

我已经在 printSum() 中初始化了相同的变量,否则,它会给我一个错误,指出变量未声明。我该怎么办?

        int *a,*b,*add;
        printf("Enter first number: ");
        scanf("%d",*&a);

您还没有为 a 分配任何内存。 还有 *&a<==>a.

首先,main 作为第一个线程开始,然后 pthread_create() 创建一个新线程,所以现在我们有两个线程。这里的问题是程序在新线程完成其操作之前完成,缺少 pthread_join() 使 main() 等待 print_Sum() 完成其任务。此外,您提供了指针,但没有内存,我决定创建一个结构来将数字传递到线程中(pthread_create() 的最后一个参数),然后将 arg 转换为该结构。

#include <stdio.h>
#include <pthread.h>

void *printSum(void *arg);

struct portions {
        int a;
        int b;
};

int main(void)
{
        struct portions a;
        printf("Enter first number: ");
        scanf("%d",&a.a);
        printf("Enter second number: ");
        scanf("%d",&a.b);


        pthread_t thread;
        pthread_create(&thread, NULL, printSum, &a);
        pthread_join(thread, NULL);
        return 0;
}

void *printSum(void *arg)
{
        struct portions *a = (struct portions *)arg;
        int add;

        add = a->a + a->b;
        printf("Sum = %d", add);
}