Программа, реализующая стек, завершается с кодом "code = 3221225477" - PullRequest
1 голос
/ 06 августа 2020

Программа представляет собой простую реализацию стека, которая продолжает появляться, пока стек не станет пустым. Выскакивает последняя буква, а затем вылетает; хотя технически он делает то, что должен делать. Я просто хотел бы знать, почему я получаю код ошибки 3221225477 и как это исправить. Я уверен, что это что-то простое.

#include <iostream>
#include <stack>
using namespace std;

//Stack implementation in C++ using stack library
int main()
{
    stack<string> s;

    s.push("A"); //Insert "A" in the stack
    s.push("B"); //Insert "B" in the stack
    s.push("C"); //Insert "C" in the stack
    s.push("D"); //Insert "D" in the stack

    //Returns the number of elements present in the stack 
    cout << "Stack size is " << s.size() << endl;

    //Prints the top of the stack ("D")
    cout << "Top element is: " << s.top() << endl;

    while (!s.empty())
    {
        cout << "Popping " << s.top() << endl;
        s.pop();
        cout << "Top element is now " << s.top() << endl;
        cout << "The stack size is now " << s.size() << endl;
    }

    return 0;
}

1 Ответ

3 голосов
/ 06 августа 2020

Здесь, если текущий элемент является последним элементом, вы pop() и затем обращаетесь к top() со стеком без элементов.

cout << "Popping " << s.top() << endl;
s.pop();
cout << "Top element is now " << s.top() << endl;
cout << "The stack size is now " << s.size() << endl;

К

cout << "Popping " << s.top() << endl;
s.pop();
if (!s.empty()) {
  cout << "Top element is now " << s.top() << endl;
  cout << "The stack size is now " << s.size() << endl;
}

Примечание:

Просто будьте осторожны, когда пытаетесь получить доступ к элементам стека, как здесь:

cout << "Top element is: " << s.top() << endl;

Прямо сейчас это не проблема, потому что стек имеет элементов, но это будет случай неопределенного поведения, если стек был пуст при вызове этой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...