我正在尝试通过串口将Arduino上的数组发送到我的计算机上。但是,每当我收到数组时,它都会包含明显随机且有时会随时更改的数据。这让我怀疑我错误地引用了指针,但我发现我的语法没有问题。
该数组由buildreport()生成,它将boolean *返回给数组中的第一个元素。这由loop()占用,它通过串行线写入。
//read pins
boolean report[NUM_BUTTONS] = {0,0,0,0,0,0,0,0,0}; //I set this to all zeroes for testing and brevity
boolean* x = &report[0];
return x;
并循环()
//if I don't read the serial, it will always be
//available and execute forever.
if(Serial.available() != 0){
incoming = Serial.read();
boolean* reports = buildreport();
//reports should now be the first element of the array
for(int i=0;i<NUM_BUTTONS;i++){
boolean x = *(reports+i);
//x is set to value at reports[0] plus i
Serial.write(x);
}
Serial.write(0x0d); //carriage return
Serial.write(0x0a); //line feed
}
每当我通过发送串行线上的任何内容来请求数组时,我得到的9个字节不是一个或零。有时第一个字节会改变。
答案 0 :(得分:1)
由于report
是一个自动存储持续时间的数组,因此在函数返回时会被销毁。使用它(通过x
,指向其第一个元素的指针)调用未定义的行为。
如果你想要一个函数来创建一个数组,那么你必须使用动态内存分配(由malloc()
及其朋友加入)或者将数组作为函数的参数传入,并让函数用它填充它适当的价值观。