首页 > 解决方案 > 我可以访问我尚未声明的向量中的位置吗?

问题描述

假设我的向量大小定义为 6。

vector<int>v(6);

但是当我输出时,它不会给我错误。

cout<<v[7]; //works

我知道向量实际上是如何增长的,他们会预先定义一些大小x并将其加倍。所以位置 7 可以接受。

但它仍然适用于位置 10000 为什么?为什么我可以访问到目前为止我尚未声明的内存位置?

cout<<v[10000]; //works

标签: c++arraysvector

解决方案


答案可以在 C++ 参考中阅读。

在这里你可以读到不会进行边界检查,也不会插入新元素。你只是有未定义的行为。

所以,更详细地说:

  • 使用索引大于向量大小的索引运算符,不会增加向量的大小并添加新元素。
  • 使用大于向量大小的越界索引将简单地访问不属于向量的内存位置。
  • 读取这样的位置通常会给出一个随机值或更好的设置,一个未定义的值。这通常不会损害您的程序,除非您得到未定义的值。
  • 写入越界值通常是一个非常严重的问题,因为您正在覆盖内存,而您并没有获胜。非常危险。

如果要进行边界检查,请-function 处使用向量。


推荐阅读