繁体   English   中英

为什么这些 printf 语句会导致堆栈溢出?

[英]Why do these printf statements cause a stack overflow?

当我运行以下代码时,出现错误。

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("trees left: %d\n", total_trees);
  printf("After printing data");
}

错误提示*** stack smashing detected ***: terminated

在输出错误之前,它会输出前三个 printf 语句。

链接到图片,因为这是我的第一篇 stackoverflow 帖子

我已经尝试过多次重新安排所有内容,但到目前为止没有任何效果。 我猜 printf 语句本身不会触发溢出,但我可能是错的。

我很感激你能提供的任何帮助:)

编辑: printf("trees left: %d\n", total_trees); 是在抛出错误之前运行的最后一行

在格式字符串中转义%字符的正确方法是%% ,而不是\% 如果您启用警告(例如gcc -Wall ),一个体面的编译器应该会警告您,您应该始终这样做。

修复后,该程序对我来说可以正常运行,并带有我尝试过的所有警告和消毒剂(尝试使用 Godbolt) 如果它仍然对您失败,那么您需要发布一个最小的可重现示例,因为该错误可能在您代码的其他部分中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM