C ++ STL堆栈弹出操作给出了分段错误

时间:2014-10-05 18:04:44

标签: c++ stl segmentation-fault stack

我在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();
        }

}

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

这一行

while((st.top() < arr[i]) && (!st.empty())) {

是导致段错误的原因。在尝试访问top之前,必须检查堆栈是否为空,因为空堆栈上的caling top会调用UB。

答案 1 :(得分:0)

未定义在空容器上调用pop_backstd::stack默认使用std::deque,请参阅std::deque::pop_back