You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 22:24:07