You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的含指针的C语言代码出现Segmentation Fault(段错误)?

段错误原因分析及修正方案

你的代码存在三个关键错误,其中前两个直接触发了段错误:

  • scanf调用的两处致命错误

    1. 格式字符串多余\n:scanf("%d\n",a);中的\n完全没必要,scanf会自动跳过输入中的空白字符(包括换行),加了反而会导致输入逻辑异常。
    2. 未传变量地址: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:12:52