【发布时间】:2015-07-06 07:32:29
【问题描述】:
void playWithThePixels(void* p, int depth, int pitch, int width, int height);
typedef unsigned char Pixel[4];
std::vector<Pixel[1600]> screen(900);
playWithThePixels(screen.data(), 32, 1600, 1600, 900);
return 0;
C 数组的元素和std::vector 都保证是连续的,因此screen 应该在内存中连续布局。
我知道越界访问数组元素是未定义的行为,但是在通过指针读取时如何,例如在示例代码中?
如果你这样做了会怎样
std::cout << screen[0][10000][0];
?这是定义的行为吗?我显然正在访问一个分配的区域。
通过指针直接或间接读取数组元素有区别吗?
【问题讨论】:
-
程序格式错误:
vector类型参数不能是数组类型(例如,由于分配器要求)。 -
@KerrekSB 好的,然后让我将向量交换为
std::array或普通数组或指向数组的指针。 -
一般规则是: 1) 不要越界访问数组。 2) 没有类型双关语。基本上,你的想法是不允许的。
-
我非常想把这个作为One-dimensional access to a multidimensional array: well-defined C? 的骗子来结束,但人们会在标签差异上有所提及;但是在这种情况下,语言要求相同的行为。
标签: c++ arrays multidimensional-array