执行加法时使用 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);
}
我正在编写一个程序,基本上对用户给出的两个值执行加法运算。这是我第一次尝试多线程。每当我输入第一个值时,它都会给我 "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);
}