C 缓冲区溢出或损坏的变量
c++ Buffer overflow or corrupted variables
当交付意外消息时,此代码是否会导致缓冲区溢出?另外,预期的消息是简单的" 1"answers" -1"。
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}
String data_received = rcv;
if (data_received == "") {
Serial.println("Null");
} else {
correction_var = data_received.toInt();
}
由于我的Arduino的RTC突然开始表现出奇怪的表现,而且我找不到适当的理由,除了他发疯之前,显然没有将消息发送到Arduino。这里这里的这一点代码处理收到的消息,所以也许之外的是什么,并且与RTC的警报变量混乱了?
更新:因此,这都不是缓冲区溢出问题,Ardunino的RTC显然存在某种问题,因为即使在重置代码后,问题仍然存在,这次是从一开始,我决定创建一个新的这里的线程。
您只是在不检查缓冲区是否已满的情况下读取无限量的值。从您的代码中:
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}
很明显,您的Char-Array RCV收到64个字符后会溢出。也许您应该停止阅读,一旦您的接收缓冲器已满?
char rcv[64] {};
int i = 0;
while (modem.available() && i < 64) {
rcv[i++] = (char)modem.read();
}
,或者您可以在阅读新的价值后覆盖最古老的价值。
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i % 64] = (char)modem.read();
++i;
}
如果modem.available()
在i
达到64时返回true,则您将具有缓冲区溢出。
此外,String data_received = rcv;
可能会在RCV中寻找null终结器(我不知道字符串是如何实现的),它可能不存在,并导致字符串读取 rcv
buffer的末端。
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- 围绕变量的堆栈是损坏的 c++
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 我的 c 字符串复制函数正在损坏其他变量的堆栈
- 位字段附近的变量会损坏吗?
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 如何在 arm 平台中调试 c 程序中的全局变量损坏
- 类私有变量损坏
- 共享库加载时静态变量损坏
- 堆栈周围变量损坏.为什么会这样呢?
- 变量损坏c++字符串Visual Studio 2005