繁体   English   中英

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

[英]Segmentation fault caused by repeating pop_back() and push_back()

当我使用 c++11 在 Clion(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();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM