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

时间:2016-03-06 23:43:31

标签: 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,但会发生读取访问冲突异常。为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

(uint8_t ***)a让编译器将a指向的内容(uint8_t**)解释为0x01010101,但实际上数组中的数据是什么,比如uint8_t (*data[5])[4][4] = { 0, 0, a, b, c}; 如果指针长4个字节。数字很​​可能成为有效地址,因此解除引用&#34;指针&#34;将导致分段错误。

使用正确的类型。

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

还要打印的声明

match

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