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

C代码调用printHELLO()时崩溃,请求排查原因与修复方向

崩溃原因

崩溃的根源不在printHELLO()函数本身,而是之前调用的cubeOfOdds()函数存在printf参数不匹配的未定义行为,破坏了程序栈内存,进而导致后续printHELLO()调用时崩溃:

  • 在cubeOfOdds()中,代码printf("Cube of %d: " , i ,": ");的格式字符串仅包含1个%d占位符,但传入了2个参数(i和字符串常量": ")。这种参数不匹配会触发C语言的未定义行为,可能篡改栈上的关键数据(比如后续scanf读取的变量值、函数返回地址等),最终引发后续函数调用崩溃。
修复方法
  1. 修正cubeOfOdds()中的printf语句,让参数与格式字符串匹配:
    将错误代码:

    printf("Cube of %d: " , i ,": ");
    

    修改为以下任一正确形式:

    // 去掉多余的冒号参数,保持格式字符串与参数一致
    printf("Cube of %d: ", i);
    // 或者将冒号整合到格式字符串中
    printf("Cube of %d:: ", i);
    
  2. 编译时建议开启警告(如使用gcc -Wall cs330_Lab2.c -o cs330_Lab2 -lm),这类参数不匹配的问题会被编译器直接提示,提前规避类似错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:50:25