c++ - 从 4 维数组读取时出现访问冲突错误

标签 c++ arrays segmentation-fault access-violation

我正在存储一些这样的数组:

uint8_t a[2][4][4] = {
{
    { 1, 1, 1, 1 },
    { 0, 0, 0, 0 },
    { 0, 0, 0, 0 },
    { 0, 0, 0, 0 },
},
{
    { 1, 1, 1, 0 },
    { 1, 0, 0, 0 },
    { 0, 0, 0, 0 },
    { 0, 0, 0, 0 },
},
};

然后,我存储了这个数组的数组:

uint8_t ***data[5] = { 0, 0, (uint8_t ***)a, (uint8_t ***)b, (uint8_t ***)c};

所以当我尝试 cout<<data[2][0][0][1];它应该打印 1 但发生读取访问冲突异常。为什么这不起作用?

最佳答案

(uint8_t ***)a 让编译器将 a 指向的内容解释为 uint8_t**,但是数组中实际上有什么数据,比如 0x01010101 如果指针是 4 字节长。该数字几乎没有机会成为有效地址,因此取消引用“指针”将导致段错误。

使用正确的类型。

uint8_t (*data[5])[4][4] = { 0, 0, a, b, c};

要打印的语句也应该是

cout<<(int)data[2][0][0][1];

否则,数字可能会被解释为字符,并且可能会打印出不可读的内容。

关于c++ - 从 4 维数组读取时出现访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834024/

相关文章:

c++ - 如何在 Windows 8 上使用 C++ 将 .jpg 转换为 .png?

c - atoi 将字符串的一部分放入数组[0]

c - 为什么下面的代码会产生段错误

c - 段错误(核心已转储)

c++ - 尝试访问指针内的数组时出现段错误

c++ - #error gl.h 包含在 glew.h 之前

c++ - Qt 和 Q_OBJECT

c++ - C++ Vector 的奇怪输出

javascript - 循环遍历数组中的对象并向每个对象添加属性

ios - Objective-C 定义供多个 ViewController 使用的全局数组