C ++:创建大于大小的数组索引而不会导致错误

时间:2014-02-07 07:11:40

标签: c++ arrays

我正在学习C ++,据我所知,如果你试图为它分配一个由于数组上的大小限制而无效的数​​据,那么数组不应该填充,但是下面的代码正确地输出232:

int stuff[5];
stuff[7] = 232;
cout<<stuff[7];

如果这是一个令人难以置信的愚蠢问题,我很抱歉,但这只是我的编译器在运行时修补之前的事情吗?

2 个答案:

答案 0 :(得分:6)

在数组边界外写入是未定义的行为,这意味着结果可能是任何结果。特别是,编译器不需要添加任何会导致发出错误消息的运行时边界检查(大多数编译器都不会,因为它更有效率)。

所以可能发生的事情是该值被写入数组末尾的内存位置。如果存储了重要的东西,就会发生一些不好的事情;或者如果发生在该位置的事情并不那么重要,您将不会注意到任何特定的影响。但是,你不能依赖它是无害的,所以不要这样做。 :)

答案 1 :(得分:2)

访问数组超出范围会导致未定义的行为。它可能会起作用,它可能会给出错误的答案,它可能会使程序崩溃,无论如何。