为什么我会出现分段错误?
#include <stdio.h>
int main() {
printf("enter the first number: ");
int a;
scanf("%d\n",a);
int *pa = &a;
printf("enter the second number: ");
int b;
scanf("%d\n",b);
int *pb = &b;
int *sum = *pa + *pb;
printf("the sum of the given numbers is %d\n", sum);
return 0;
}
尝试重新排列变量,但仍然出现相同的错误
给定
int a
和 int b
,对 scanf
的相应调用应使用每个变量的地址,例如 scanf("%d", &a);
。
或者,使用您创建的指针,例如
scanf("%d", pb);
。
在
int *sum = *pa + *pb;
*pa + *pb
是两个整数值相加,产生一个 int
,然后将其转换为 int *
类型的 指针值,并分配给
sum
。
在
printf("the sum of the given numbers is %d\n", sum);
与
%d
关联的可变参数必须是 int
(或者受到 整数提升 的影响,从而产生 int), but you pass an
int *`。这会调用 未定义的行为。
要解决这两个问题,
int *sum
应该是 int sum
。