gpt4 book ai didi

c - 从指针访问数组会给出不断变化的错误值

转载 作者:行者123 更新时间:2023-11-30 19:22:11 25 4
gpt4 key购买 nike

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

最佳答案

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

如果你想要一个函数创建一个数组,那么你必须使用动态内存分配(由 malloc() 及其 friend 完成)或将数组作为函数的参数传递,并让函数用适当的值填充它。

关于c - 从指针访问数组会给出不断变化的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18069136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com