GFG括号匹配题本地运行正常 提交报SIGSEGV段错误如何解决
错误原因
- 核心触发点是空栈调用
top()方法:当输入字符串出现右括号前置、或右括号总数量多于左括号的场景时,栈还处于空状态就会执行s.top()操作。C++ 中std::stack对空栈调用top()属于未定义行为,绝大多数场景下会直接触发段错误(SIGSEGV)。 - 自定义测试未复现是因为没有覆盖「右括号前置/右括号数量更多」的边界场景,而平台提交的测试用例覆盖了这类情况。
修复方案
在判断右括号与栈顶匹配前,先增加栈非空的校验,同时给匹配逻辑增加括号明确运算优先级,修改后代码如下:
bool ispar(string x) { int n = x.length(); stack<char> s; int i = 0; while(i < n) { if(x[i] == '[' || x[i] == '(' || x[i] == '{' ) s.push(x[i]); // 先校验栈非空,再判断括号是否匹配 else if (!s.empty() && ( (x[i] == ']' && s.top() == '[') || (x[i] == ')' && s.top() == '(') || (x[i] == '}' && s.top() == '{') )) s.pop(); else return false; i++; } return s.empty(); }
内容的提问来源于stack exchange,提问作者Anuj Sunder
相关产品推荐
相关产品推荐

