为什么调用std :: vector :: back()会导致我的程序崩溃

时间:2012-01-19 10:01:15

标签: c++ visual-c++ stl stdvector std

我不确定此代码有什么问题:

std::vector<int> myVector(0);

if (myVector.back() == 12)
    myVector.push_back(12);

似乎在空向量上调用back()会使程序崩溃。

我不明白它为什么会崩溃?在调用back()之前,我们是否需要检查向量的长度?或者它可能是一个错误?

文档说,如果向量为空,则返回未定义的值。

2 个答案:

答案 0 :(得分:13)

  

在调用back()之前我们需要检查向量的长度吗?

总之:是的。这是你的错误,你的向量是空的,所以没有“后退”元素。

文档应该说(如果它说的话),在空向量上调用back()会导致未定义的行为,而不是它返回一个未定义的值。

答案 1 :(得分:6)

c ++ 11标准告诉我们:

23.3.2.8 / 3

  

为零大小的数组调用front()或back()的效果未定。

由于行为未定义,任何事情都可能发生。你很幸运遇到了崩溃。