【问题标题】:Variable misteriously being set to 204变量神秘地设置为 204
【发布时间】:2018-10-24 19:13:46
【问题描述】:

第一次使用 SO。所以,我在随意编码,我启动这个全局变量 rC 并将其设置为 0。rC 是一个计数器,但是当它需要它做自己的事情时,它会变得很糟糕。这是一些代码和输出(我正在编写 Doit ESP32)

DEBUGPRINTLN3("Sampled xC");
DEBUGPRINTLN3(xC);
rC = 0;
Serial.println("rC before increment");
Serial.println(rC);
if(rC == 204) 
{
  Serial.println("WTF");
  rC = 0;
}
rC += 1;
dx = -dx;
xC = -xC;

if 语句是在我寻找问题根源时添加的(这个错误让我的整个程序变得疯狂,因为该计数器会发出一堆其他的信号,包括它自己的重置)

这是串行输出:

14:48:23.017 -> Sampled xC
14:48:23.017 -> 299
14:48:23.017 -> rC before increment
14:48:23.017 -> 204
14:48:23.017 -> WTF
14:48:23.017 -> xC:
14:48:23.017 -> -299
14:48:23.017 -> HAS REVERSED
14:48:23.017 -> rC INCREMENTED 1
14:48:23.017 -> 1

我使用的“修复”非常糟糕,如果我更改其他一些变量,它就不会起作用,但它可以解决这种情况。 知道是什么原因造成的吗?

如果有人想知道:只有 3 个其他实例更改了 rC,这是另一个 rC +=1 和 rC = 0(初始化和稍后重置)。在 rC+=1 附近没有 while 或 for 任何地方;除此之外,rC 只能读取,不能编辑。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读the help pagesthe SO tour、阅读how to ask good questions,以及this question checklist。最后学习如何创建Minimal, Complete, and Verifiable Example
  • 那里没有足够的代码来告诉你为什么会遇到这个问题 - 你需要将你的代码减少到重现问题的最小代码量,然后发布 所有剩下的代码供别人帮助你。 minimal reproducible example
  • MCVE 的真正美妙之处在于您很少需要将其带到结论中。通常,您会部分解决问题,并且降低的错误与代码噪声比使错误及其解决方案显而易见。如果你一直到 MCVE,你就会遇到一个非常巧妙的错误,或者误解了编译器将对你的代码做什么。无论哪种方式,如果您在没有使用像 MCVE 这样的分而治之的方法来隔离错误的情况下提出问题,那么您提出的问题太早了。
  • 同意。下次我会这样做,谢谢。

标签: c++ arduino esp32


【解决方案1】:

您的变量中的值几乎肯定是您的编译器为了帮助您意识到它未初始化而将其放在那里的。 0xCC(十进制的 204)通常用于自动/本地/“堆栈”变量。我不知道您的代码(似乎显示正在初始化的变量)与您声称生成的输出相关。我建议您修改您的问题,并确保您发布了一个最小、完整且可验证的问题示例。

【讨论】:

  • 检查未初始化变量的代码并修复它。这是一个不相关的变量,但它似乎是问题的根源。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多