从 4 维数组读取时出现访问冲突错误
access violation error when reading from 4-dimentional array
我正在存储一些这样的数组:
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 字节长。该数字几乎没有机会成为有效地址,因此取消引用 "pointer" 将导致分段错误。
使用正确的类型。
uint8_t (*data[5])[4][4] = { 0, 0, a, b, c};
要打印的语句也应该是
cout<<(int)data[2][0][0][1];
否则,该数字可能会被解释为字符,并且可能会打印出一些不可读的内容。
我正在存储一些这样的数组:
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 字节长。该数字几乎没有机会成为有效地址,因此取消引用 "pointer" 将导致分段错误。
使用正确的类型。
uint8_t (*data[5])[4][4] = { 0, 0, a, b, c};
要打印的语句也应该是
cout<<(int)data[2][0][0][1];
否则,该数字可能会被解释为字符,并且可能会打印出一些不可读的内容。