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

为何这些printf语句会导致栈溢出(stack smashing)?

问题分析与解决建议
  • 格式串错误是首要排查点:你代码里的printf("total burned: %d (%.1f\%)\n",burned,percentBurned);写法有问题——C语言里要输出百分号%,必须用%%,而不是\%。这个错误会让printf解析格式串时逻辑混乱,直接破坏栈结构,大概率就是触发栈溢出检测的原因。把\删掉,改成%.1f%%就行。

  • 检查函数调用的传参合法性:栈溢出也可能是调用printData时传参出错导致的,比如传了非int类型的参数(比如指针、超出int范围的数值),或者参数顺序搞反了。可以在调用这个函数前,先把要传入的total_trees和burned值打印出来,确认是合法的整数。

  • 排查其他栈破坏行为:如果改了格式串还是报错,就得看看调用printData的前后代码有没有越界操作——比如数组下标越界、野指针写内存,这些操作会悄悄破坏栈上的数据,等到执行printf时才触发溢出检测。

修正后的代码示例

void printData(int total_trees,int burned){ 
    printf("Before printing data\n"); 
    float percentBurned = (float)burned / (total_trees + burned) * 100; 
    printf("total burned: %d (%.1f%%)\n", burned, percentBurned); 
    printf("trees left: %d\n", total_trees); 
    printf("After printing data"); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:12:31