Reputation: 13
When I run the following code in Clion(an IDE) with c++11. I ran into a segmentation fault. But if I delete the if statement, add else before pop_back, remove push_back, or remove pop_back(do them separately). There would be no error. So why there would be a segmentation fault and why doing any of the above would eliminate the error?
#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();
}
}
Edit: Some people say it's because pop_back from empty vector, but if I remove push_back() there won't be any problem(even if I push_back some elements before the loop).
Upvotes: 0
Views: 451
Reputation: 50802
You are popping from the vector when it is empty. Using pop_back()
from an empty vector results in undefined behaviour which means:
Consider this code:
#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();
}
}
Upvotes: 1