考虑这个程序:
#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中的一些新功能吗?
答案 0 :(得分:3)
您正在访问导致未定义行为的无效内存位置。所以任何事情都可能发生。
答案 1 :(得分:1)
返回向量中位置 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 ++不会检查