从指针访问数组会产生更改的错误值

时间:2013-08-05 22:54:36

标签: c pointers serial-port arduino

我正在尝试通过串口将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个字节不是一个或零。有时第一个字节会改变。

1 个答案:

答案 0 :(得分:1)

由于report是一个自动存储持续时间的数组,因此在函数返回时会被销毁。使用它(通过x,指向其第一个元素的指针)调用未定义的行为。

如果你想要一个函数来创建一个数组,那么你必须使用动态内存分配(由malloc()及其朋友加入)或者将数组作为函数的参数传入,并让函数用它填充它适当的价值观。