Почему мой код на C ++ заканчивается кодом завершения 11 при использовании стека? - PullRequest
0 голосов
/ 24 января 2020
#include <iostream>
#include <stack>

int main() {
    std::string s = "()"; // Input

    std::stack<char> stack_;

    for (int i=0; i < s.length(); i++) {
        if (s[i] == stack_.top()) {
            stack_.pop();
        }
        if (s[i] == '(') {
            stack_.push(')');
        }
        if (s[i] == '{') {
            stack_.push('}');
        }
        if (s[i] == '[') {
            stack_.push(']');
        }
        else {}
    }
    while(!stack_.empty()) {
        std::cout << stack_.top() << std::endl;
        stack_.pop();
    }


    return 0;
}

Я довольно новичок в C ++ и пытаюсь улучшить, задавая вопрос на LeetCode.com каждый день. Сначала я тестирую свой код в CLion, что приводит к ошибке «Процесс завершен с кодом завершения 11» для этого кода. Вопрос, который я пытаюсь решить: https://leetcode.com/problems/valid-parentheses/

Это просто тестовый код, в котором я изменяю ввод строки s, и моя стратегия состоит в том, чтобы заключать типы скобок в затем стек очищает их, если соответствующая закрывающая скобка является следующим символом, а затем, если в конце стека пусто, строка проходит тест.

Я считаю, что код выхода 11 является ошибкой утечки памяти или сегментации ошибка, но я не могу понять, где точно определить, где это может произойти, посмотрев на мой код. Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Эта строка вызывается всегда, даже когда stack_ только что создан:

   if (s[i] == stack_.top()) {

вызов top() для пустого стека приводит к неопределенному поведению.

1 голос
/ 24 января 2020

std :: stack :: top description https://en.cppreference.com/w/cpp/container/stack/top

Вы пытаетесь получить ссылку на верхний элемент пустого стека, поэтому вы получаете исключение

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