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

MBe*_*Ben 6 c++ stl std stdvector visual-c++

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

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

if (myVector.back() == 12)
    myVector.push_back(12);
Run Code Online (Sandbox Code Playgroud)

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

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

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

CB *_*ley 13

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

总之一句:是的.这是你的错误,你的向量是空的,所以没有"后退"元素.

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


BЈо*_*вић 6

c ++ 11标准告诉我:

23.3.2.8/3

对于零大小的数组调用front()或back()的效果是未定义的.

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

  • @MBen在UB上发生程序崩溃很好,因为很容易发现错误.当它有时工作,有时不工作时,很难找到错误. (3认同)