重复pop_back()和push_back()导致的段错误

Segmentation fault caused by repeating pop_back() and push_back()

当我使用 c++11 运行 在 Clion(an IDE) 中编写以下代码时。我 运行 进入分段错误。但是如果我删除 if 语句,在 pop_back 之前添加 else,删除 push_back,或删除 pop_back(单独执行)。不会有错误。那么为什么会出现分段错误,为什么执行上述任何操作都会消除错误?

#include "vector"
using namespace std;

int main() {
    vector<int> test;
    for(int i = 0; i < 10000; i++){
        if(i % 2 == 0)
            test.push_back(i);
        test.pop_back();
    }
}

编辑:有人说这是因为 pop_back 来自空向量,但是如果我删除 push_back() 就不会有任何问题(即使我 push_back 一些元素在循环之前)。

当矢量为空时,您正在从矢量中弹出。从空向量中使用 pop_back() 会导致 未定义的行为,这意味着:

  • 你的程序可能会崩溃
  • 你的程序可能会打印一些废话
  • 您的程序可以正常继续
  • 您的程序可以正常继续,但稍后会出现其他一些看似无关的奇怪行为
  • 或其他一些行为

考虑这段代码:

#include <vector>
#include <iostream>

using namespace std;

int main() {
  vector<int> test;
    
  for (int i = 0; i < 10; i++) {
    if (i % 2 == 0)
      test.push_back(i);

    if (test.empty())
      cout << "stack is empty" << endl;
    else
      test.pop_back();
  }
}