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

Why is my c++ code finishing with exit code 11 when using the stack?

本文关键字:代码 退出 结尾 c++ 我的 为什么 堆栈      更新时间:2023-10-16
#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 是内存泄漏或分段错误,但我无法通过查看我的代码来确定在哪里可以查明这种情况发生的位置。任何帮助将不胜感激。谢谢!

总是调用此行,即使刚刚创建stack_

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

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

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

您正在尝试获取对空堆栈的顶部元素的引用,因此您收到异常