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

C语言传入三个double指针存储三角形边长,输入后程序崩溃如何解决?

崩溃原因
  • 最直接的触发点是空指针解引用:你代码中的if (side1 == 0)是判断指针本身是否为空,当该条件成立时,side1是空指针,此时执行*side1 = value会直接操作非法内存,导致程序崩溃。
  • 逻辑存在偏差:你原本的需求是判断side1指向的double变量是否还未赋值(初始值为0),正确的判断条件应该是*side1 == 0,而非判断指针本身的值。
  • 调用方式错误也可能触发该问题:如果在调用该函数时,你传入的是未初始化的野指针,没有让指针指向有效的double类型变量,解引用操作同样会触发崩溃。
  • 额外隐患:fgets返回NULL时你没有做任何容错处理,直接使用input缓冲区的内容,极端情况下也会引发异常。
修复方案
  1. 修正赋值判断逻辑,将指针本身的判断改为对指针指向值的判断:
// 修正side1、side2、side3的判断条件
if (*side1 == 0) {
    *side1 = value;
} else if (*side2 == 0) {
    *side2 = value;
} else if (*side3 == 0) {
    *side3 = value;
}
  1. 保证调用侧传入的指针指向有效内存:
    调用该函数前需要先声明普通double变量,初始化值为0后,将变量的地址传入函数,示例:
// 调用侧示例代码
double s1 = 0, s2 = 0, s3 = 0;
// 传入变量地址,而非未初始化的指针
input_triangle_sides(&s1, &s2, &s3);
  1. 补充fgets异常处理逻辑,避免读取失败后访问无效数据:
if (fgets(input, sizeof(input), stdin) == NULL) {
    printf("输入读取失败,请重试\n");
    // 此处根据你的业务逻辑做返回或者重试处理
    return;
}

内容的提问来源于stack exchange,提问作者Molly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:04