C STL库矢量2D数组不超出边界

C++ STL Library Vector 2D arrays not out of bounds

本文关键字:边界 数组 2D STL      更新时间:2023-10-16

当我尝试在下面运行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()