C中的疯狂错误,未定义的行为?

时间:2018-11-20 13:52:41

标签: c undefined-behavior

我正在开发一个大型C代码,并且自然会在一开始就崩溃。我找到了错误的来源,它来自这里:

printf("%s %d", "\nki2 : ", ki2);
puts("\nline # 1704");
printf("%s %d", "\nki2 : ", ki2);

返回终端:

ki2 :  237
line # 1704

,然后崩溃,退出值为-1。在第一次访问ki2和第二次访问之间什么都没有发生,那么为什么程序在ki2的第二次调用而不是第一次调用时崩溃了?!

顺便说一下,这些行是循环执行的,并且在崩溃发生之前已成功执行了很多次。

如果将打印行替换为printf("\nki2 : %i", ki2);,是否执行相同操作。

ki2是一个整数。 Is的值来自存储在动态数组中的另一个int。

1 个答案:

答案 0 :(得分:2)

也许最后一行卡在了输出缓冲区中。试试

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);