为何我的含指针的C语言代码出现Segmentation Fault(段错误)?
段错误原因分析及修正方案
你的代码存在三个关键错误,其中前两个直接触发了段错误:
scanf调用的两处致命错误
- 格式字符串多余
\n:scanf("%d\n",a);中的\n完全没必要,scanf会自动跳过输入中的空白字符(包括换行),加了反而会导致输入逻辑异常。 - 未传变量地址:scanf的第二个参数需要接收变量的内存地址(用于写入输入值),但你直接传了变量
a和b的当前值。这会让scanf把输入的整数当作内存地址去写入数据,而这个地址几乎肯定是程序没有权限访问的内存区域,直接触发段错误。正确写法是scanf("%d", &a);和scanf("%d", &b);。
- 格式字符串多余
指针类型误用
int *sum = *pa + *pb;中,*pa + *pb是两个int类型的数值之和,结果是int类型,但你把它赋值给了int*指针变量。后续用printf("%d", sum)打印的是指针的内存地址而非实际的和,属于逻辑错误。应将sum定义为普通int变量:int sum = *pa + *pb;。
修正后的完整代码:
#include <stdio.h> int main() { printf("enter the first number: "); int a; scanf("%d", &a); int *pa = &a; printf("enter the second number: "); int b; scanf("%d", &b); int *pb = &b; int sum = *pa + *pb; printf("the sum of the given numbers is %d\n", sum); return 0; }
内容的提问来源于stack exchange,提问作者Subzee
相关产品推荐
相关产品推荐

