簡體   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