为什么我在这里遇到指针分段错误?

问题描述 投票:0回答:1

为什么我会出现分段错误?

#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;
}

尝试重新排列变量,但仍然出现相同的错误

c pointers segmentation-fault
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.