c - C中的疯狂错误,未定义的行为?
问题描述
我正在开发一个大型的 C 代码,自然会在一开始就崩溃。我找到了错误的起源,它来自这里:
printf("%s %d", "\nki2 : ", ki2);
puts("\nline # 1704");
printf("%s %d", "\nki2 : ", ki2);
在终端返回:
ki2 : 237
line # 1704
然后以 -1 的退出值崩溃。在第一次访问ki2
和第二次访问之间没有发生任何事情,那么为什么程序在第二次调用ki2
而不是在第一次调用时崩溃了?!
顺便说一句,这些行是循环执行的,并且在崩溃发生之前成功执行了很多次。
如果将打印行替换为 ,则 Is 的作用相同printf("\nki2 : %i", ki2);
。
ki2 是一个整数。Is 的值来自存储在动态数组中的另一个 int。
解决方案
也许最后一行卡在输出缓冲区中。尝试
printf("%s %d", "\nki2 : ", ki2);
puts("\nline # 1704");
printf("%s %d", "\nki2 : ", ki2);
fflush(stdout);
*程序更常见的是用 '\n' 终止行而不是用它开始行。你也可以试试
printf("%s %d\n", "ki2 : ", ki2);
puts("line # 1704"); // puts adds '\n' automatically
printf("%s %d\n", "ki2 : ", ki2);
推荐阅读
- arduino - NEO-6M GPS 返回整数而不是 NMEA 消息 (Arduino Uno)
- kernel - google colab 中未显示 printf 输出
- java - 在 Java8 中简化方法和按 ID 排序时出错 - 收集器
- groovy - 403 服务器在使用soapui 获取Azure 存储数据时未能对请求进行身份验证
- android - 如何在gridlayout或gridview中放置动态arraylist按钮
- c++ - 访问类的私有成员(C++)
- javascript - 如何在 Woocommerce 的 ajax 事件后运行 jQuery 函数
- css - 在 google chrome 中带有 flex 按钮标签的 alight-item 不起作用
- dialogflow-es - Dialogflow,从单个输入设置两个参数
- php - 如何在已删除的小部件上禁用 @Assert 验证