2D-Array 会在存储新元素时删除元素本身
2D-Array deletes elements itself when new elements get stored
edit:我没有用正确的大小初始化数组。我应该用 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
的 2D 数组,但您访问单行的 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++如何通过用户输入删除列表元素
- 使用函数"remove"删除重复元素
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除列表中的第n个元素
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 如何使用remove_if从矢量中删除元素
- 如何从使用 for 循环中的矢量大小的矢量中删除元素
- 从矢量中删除空元素
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 删除指针数组 (C++) 中的元素
- 删除列表 c++ 中的最后 3 个元素
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 从std::multiset的第i个元素删除到末尾
- 删除 [] 是否等于每个元素删除.C++
- std::列出元素删除后节点的内存回收