重复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();
}
}
当我使用 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();
}
}