在C++中尝试推送到int堆栈或向量时出现分段错误



现在我正试图解决一个有竞争力的编程问题,但每当我试图推到向量(bb(时,它都会给我一个segfault。我试着通过从堆栈切换到向量,并尝试推送一个没有变量的正则整数来解决这个问题,但我运气不好。

#include <bits/stdc++.h>
#include <iostream>
#include <stack>
using namespace std;

int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t, n;
cin >> t;
for(int e = 0; e < t; e++){
cin >> n;
int want = 1, temp;
bool flag = true;
stack<int> mountain;
vector<int> bb;
for(int i = 0; i < n; i++){
cin >> temp;
mountain.push(temp);
}
while(!mountain.empty() || !bb.empty()){
if(mountain.top() == want){
mountain.pop();
want++;
}else if(!bb.empty() && bb.back() == want){
bb.pop_back();
want++;
}else if(mountain.size() > 1){
bb.push_back(mountain.top()); // <-----------------
mountain.pop();
}else{
cout << "Nn";
flag = false;
break;
}
if(flag && want == n + 1) cout << "Yn";
} 
}   
return 0;
}

如果你需要这个问题的任何上下文,可以在这里找到。

当我编译您的代码并通过gdb运行它时,我在以下行得到一个segfault:

while(!mountain.empty() || !bb.empty()){
if(mountain.top() == want){    <-------------------
mountain.pop();
want++;

这是因为在while检查中,要测试bbmountain是否为空才能继续。bb不是空的,山。然后您尝试调用mountain.top(),这导致了您的segfault。

这里需要清理一些逻辑。

相关内容

  • 没有找到相关文章

最新更新