C ++向量奇怪的行为

时间:2012-03-02 15:23:01

标签: c++

考虑这个程序:

#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    vector<double> a;
    while (a.size() <= 10)
        a.push_back(2);
    cout << a[15] << endl;
}

我希望它在被要求访问a的第15个元素时崩溃,但它不会(在我的系统上输出0)。是什么赋予了?这是gcc中的一些新功能吗?

6 个答案:

答案 0 :(得分:3)

您正在访问导致未定义行为的无效内存位置。所以任何事情都可能发生。

答案 1 :(得分:1)

This references说它

  

返回向量中位置 n 处元素的引用   容器

     

类似的成员函数 vector :: at 具有与此相同的行为   运算符函数,除了 vector :: at 信号,如果请求的话   通过抛出异常,位置超出了范围。

所以,这可能会也可能不会崩溃。

答案 2 :(得分:0)

operator[]没有边界检查,在这种情况下你是* un * lucky并且可以读取该位置的地址而不会导致运行时错误。

答案 3 :(得分:0)

这并不奇怪..当插入a.size() - 1元素时,矢量会增大它的大小。现在你有20种元素..(可能不是20但是超过11(=)< / p>

答案 4 :(得分:0)

因为当你访问它时,向量的增长可能大于15?

检查capacity()

答案 5 :(得分:-1)

我正在阅读的内存在你的程序中它不会崩溃,c ++不会检查