Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 为什么会出现这种奇怪的无限循环?_Loops_Arduino_Serial Port_Infinite Loop - Fatal编程技术网

Loops 为什么会出现这种奇怪的无限循环?

Loops 为什么会出现这种奇怪的无限循环?,loops,arduino,serial-port,infinite-loop,Loops,Arduino,Serial Port,Infinite Loop,我正在写一个arduino串行通信代码,我将通过串行通信发送句子,比如“azyb”+句子+“byza”,其中第一部分和第二部分是识别我的句子的开始和结束。我的代码在这里(只给出循环函数,而其他函数工作正常): void循环() { 如果(Serial.available()>0) { int i=0,j=0,len=0; 字句; String line=Serial.readString(); len=line.length(); 序列号println(len); 串行打印LN(行); 对于(;

我正在写一个arduino串行通信代码,我将通过串行通信发送句子,比如“azyb”+句子+“byza”,其中第一部分和第二部分是识别我的句子的开始和结束。我的代码在这里(只给出循环函数,而其他函数工作正常):

void循环()
{
如果(Serial.available()>0)
{
int i=0,j=0,len=0;
字句;
String line=Serial.readString();
len=line.length();
序列号println(len);
串行打印LN(行);
对于(;i0)
char c=Serial.read();
}
}
但当我发送一个像“azybanklonbyza”这样的有效语句,在OLED显示屏上显示“anklon”时,代码被困在一个无限循环中,如果条件为真,它会一直循环到第一个,但如果条件为真,它永远不会运行到第二个,然后循环回来,它不应该这样做

这个无限循环不检查encry_标志为true或false的条件,并且从不转到正在清除缓冲区的语句。 从屏幕截图中,您可以理解for循环中的for循环和while循环会随着总字符串的不断打印而中断,这在for循环之前只执行过一次

这个无限循环是从哪里创建的?我完全迷路了


仅供参考:如果没有在开头和结尾添加“azyb”和“byza”,代码运行得很好,因为它永远不会满足任何if条件。我也试着用一个字符(“azybhbyza”来打印“h”),但结果是一样的

我不熟悉arduino,但是

if (line[i+1] == 'b' && line[i+2] == 'y' && line[i+3] == 'z' && line[i+4] == 'a')
不应该从我开始吗?我看到你用了一个字符指针“sentance”,但据我所知,你没有在任何地方初始化它。根据编译器内存管理的不同,未初始化的指针可能会导致内存损坏。根据硬件内存的不同,我还考虑到它可能会损坏其他一些内存内容。这可以解释变量“i”没有到达终点。尝试用一些空格初始化sentance,如

sentance = new char[25];

这可能有用。而且,如果您在硬件上进行测试,它有时可能会表现得异常。

我的变量i在声明语句指针之前已初始化,因此就我所知,语句内存不会损坏i的值。我不知道,巴迪
sentance = new char[25];