在VC ++运行时不能验证数组的长度吗?

时间:2013-10-07 06:04:55

标签: c++ arrays visual-c++

当我运行程序从数组中获得第5个元素时,只有大小为4,我得到垃圾值而不是数组超出绑定异常。在VC ++运行时不能验证数组的长度吗?

4 个答案:

答案 0 :(得分:6)

在C ++中,读取数组的末尾会导致未定义的行为,这意味着几乎任何事情都可能发生 - 您可能会遇到垃圾,可能会获得有效数据,您可能会触发调试断言或例外等。但是,你不应该依赖任何特别的事情。使用C ++的一个挑战是学习检查你的数组索引,因为它几乎是C ++生活中的一个事实,语言不会为你做。

希望这有帮助!

答案 1 :(得分:4)

普通数组不执行边界检查。如果您需要,请改用std::vector。它的[]运算符不执行边界检查,但是它的at()方法会执行,在访问无效索引时抛出std::out_of_range异常。

答案 2 :(得分:2)

VC ++是一种实现C和C ++的产品。编程语言没有定义任何边界检查,编译器也没有实现它。当您从边界访问内存时,您可以访问某些未定义的行为。

答案 3 :(得分:2)

C ++包含绑定检查的数组,但不使用[]std::array<T, N>::at(i)将检查0 <= i < N,并抛出std::out_of_range例外。

std::vector<T>是数组的可变长度等价物,并提供相同的at()方法。这当然使用当前的向量长度,而不是硬编码的N