[英]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.