首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在使用堆栈时,我的c++代码以退出代码11结束?

为什么在使用堆栈时,我的c++代码以退出代码11结束?
EN

Stack Overflow用户
提问于 2020-01-24 18:53:06
回答 2查看 256关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
复制
#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中测试了我的代码,这会给我这个代码一个"Process finished with exit code 11“的错误。我想要解决的问题是:https://leetcode.com/problems/valid-parentheses/

这只是一段简单的测试代码,我更改了字符串s的输入,我的策略是将括号类型放在堆栈上,如果匹配的闭括号是下一个字符,则将它们剥离,然后如果堆栈最后为空,则字符串通过测试。

我认为退出代码11是内存泄漏或分段错误,但通过查看我的代码,我无法确定可能发生在哪里。任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-24 18:58:00

这一行总是被调用,即使在刚刚创建stack_时也是如此:

代码语言:javascript
代码运行次数:0
运行
复制
   if (s[i] == stack_.top()) {

在空堆栈上调用top()会导致未定义的行为。

票数 2
EN

Stack Overflow用户

发布于 2020-01-24 19:01:11

std::stack::顶部描述https://en.cppreference.com/w/cpp/container/stack/top

您正在尝试获取对空栈的顶部元素的引用,因此会得到一个异常

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59894999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档