gpt4 book ai didi

c++ - 当存储新元素时,二维数组会删除元素本身

转载 作者:行者123 更新时间:2023-11-30 18:45:29 27 4
gpt4 key购买 nike

编辑:我没有用正确的大小初始化数组。我应该使用 8 而不是 7。我必须知道数组从 0 开始计数,但在初始化时则不然!

我有一个二维数组存储[x][y]并且想要为每个x值存储8个不同的y值。由于某种原因,我可以读出数组中的特定位置,例如 [48][7],并且在填充数组中的其他空间后,[48][7] 值发生了变化,即使我从未碰过它。

int storage[127][7];

void store(){
storage[48][0] =0b01111110;
storage[48][1] =0b01111110;
storage[48][2] =0b11100011;
storage[48][3] =0b11010011;
storage[48][4] =0b11001011;
storage[48][5] =0b11000111;
storage[48][6] =0b01111110;
storage[48][7] =0b01111110;


Serial.println(storage[48][7], BIN); // returns 01111110

storage[49][0] =0b00000000;
storage[49][1] =0b11000001;
storage[49][2] =0b11000001;
storage[49][3] =0b11111111;
storage[49][4] =0b11111111;
storage[49][5] =0b00000001;
storage[49][6] =0b00000001;
storage[49][7] =0b00000000;

Serial.println(storage[48][7], BIN); // returns 0
}

根据我存储值的顺序,其中一些值会相互删除。

为什么我突然丢失数据?

最佳答案

您正在定义一个行大小为 7 的二维数组,但是您访问单行的 8 个元素:

 int storage[127][7];

storage[48][0] =0b01111110;
...
storage[48][7] =0b01111110;

请注意,0..7 实际上是 8 个元素,而不是 7 个。因此您必须定义 storage作为...

 int storage[127][8];

现在可以讨论如果 int storage[127][7];storage[48][7] =0b01111110是未定义的行为;

然而最可能的行为是 storage[48][7]映射到与 storage[49][0] 相同的内存地址。因此,当您分配 storage[49][0] =0b00000000; 时,然后写信给 storage[48][7] “也”,它将变成 0b0000000 .

关于c++ - 当存储新元素时,二维数组会删除元素本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562271/

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