C STL库矢量2D数组不超出边界
C++ STL Library Vector 2D arrays not out of bounds
当我尝试在下面运行C 代码时,它不会返回界限错误。实际上,它运行良好,并给我11个输出。这是为什么?
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector< vector<int> > Matrix(10, vector<int>(10));
Matrix[9][10000]=11;
cout<<Matrix[9][10000];
return 0;
}
c 对vector
s的operator[]
检查不限制检查,因此访问界外元素是未定义的行为。它很可能没有任何问题而运行,或者可能崩溃您的程序甚至格式化您的硬盘驱动器。
实际上,对于小错过(例如几个元素等),访问可能属于您程序拥有的内存,因此该程序很可能不会注意到它。(前提是您不会覆盖其他重要变量。)特别是,vector
通常保留比实际使用的更多的内存,因此,使用vector
的小错过很可能会落入分配但未使用的内存中,并且会运行正常。<<<<<<<。/p>
在这种特殊情况下,正确的运行非常奇怪,因为它离界限确实很远,但是我认为优化器可以完全优化远离数组访问。它可以看到相同的元素被分配和打印,并且可以删除Asignment和打印。
要进行适当的绑定检查,您可以使用.at()
。
相关文章:
- 在 64 位边界上对齐C++结构数组?
- std::数组边界检查如何工作?
- 在 c++ 中是否允许创建具有运行时边界的数组?
- SystemC sc_signal数组内存边界
- 在哪种情况下,C++会在编译时进行数组边界检查?
- 为什么当我在 CPP 的初始化中指定多维数组时,它必须有边界
- 访问边界外的数组元素会损坏它
- 分段错误发生在索引离开C++数组边界之后
- 使用 auto 时不检查数组边界
- 数组边界外的指针
- C++中"T 的未知边界数组"的外部声明
- 为什么 gcc 即使请求也不抱怨数组边界?
- C STL库矢量2D数组不超出边界
- 将索引超出数组边界在 C++ 中的内核之前抛出异常或错误
- C++ - 最快的检查数组边界
- 使用硬件内存保护对64位硬件进行数组边界检查
- 作为具有任意边界的类成员的多维数组
- 比较器获取C++中数组边界之外的索引
- 运行时边界数组的源级别检测有多困难
- c++(非C)中指向未指定边界数组的指针的可用情况