gpt4 book ai didi

c - 尝试使用 printfs 时神秘的 c 调试问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:33 24 4
gpt4 key购买 nike

好的,伙计们。我以前从未遇到过这种情况,它令人难以置信并且不合逻辑。我有一个有点复杂的循环,我想通过放置一些 printf 语句来尝试看看是否一切正常。我使用 printf 查看中间产品并验证答案是否正确。然后,当我注释掉中间产品的 printf 时,答案是错误的。有没有人遇到过这个?这让我发疯,我看不出 printfs 如何改变答案.... X_x 如果有帮助,我正在为 DSP 使用 c/c++ 编译器。感谢您的任何建议..

这是一个片段...

printf("splitBackground = %d, numWindowPoints = %d\n", splitBackground, numWindowPoints);
splitBackground = splitBackground/numWindowPoints;
printf("%d ", splitBackground);

这很好,但是当我注释掉第一行代码时,结果发现它非常不正确。 :(

最佳答案

很可能您在代码中犯了导致未定义行为的错误。而“未定义”意味着“它可能在某些情况下有效”。

为什么插入 printf 可以让它工作?一些可能性:

它改变了程序不同部分之间或程序与世界其他部分之间的时间关系。

printf 调用会抑制编译器优化,否则可能会发生这种情况。

printf 调用以一种防止错误发生的方式改变了标准库的内部状态。

printf 调用以防止错误发生的方式与硬件交互。

(请注意,在调试器下运行时,许多相同的注意事项也适用——因此称为“heisenbug”:一种仅在您不注意时才会发生的错误。)

关于c - 尝试使用 printfs 时神秘的 c 调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com