我在C ++中实现了来自this link的编程问题,但是我的代码在pop()
操作中遇到了分段错误。我是C ++的新手,似乎无法自己找到错误。
#include<iostream>
#include<stack>
using namespace std;
void printNge(int *arr);
int main() {
int arr[] = {1,4,2,6,3,8,7,2,6};
printNge(arr);
return 0;
}
void printNge(int *arr) {
stack<int> st;
st.push(arr[0]);
for(int i=1; i<9;i++) {
while((st.top() < arr[i]) && (!st.empty())) {
cout << "Element is:" << st.top() << " NGE is:" << arr[i] << endl;
cout << "Removing element: " << st.top() << endl;
st.pop();
}
cout << "Pushing element: " << arr[i] << endl;
st.push(arr[i]);
}
while(!st.empty()) {
cout << "Element is:" << st.top() << " NGE is:" << -1 << endl;
st.pop();
}
}
感谢您的帮助。
答案 0 :(得分:6)
这一行
while((st.top() < arr[i]) && (!st.empty())) {
是导致段错误的原因。在尝试访问top之前,必须检查堆栈是否为空,因为空堆栈上的caling top
会调用UB。
答案 1 :(得分:0)
未定义在空容器上调用pop_back
。 std::stack
默认使用std::deque
,请参阅std::deque::pop_back: