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

C++栈与Map程序运行挂起问题排查

C++程序挂起问题分析

问题根源

这段代码处理右括号时,未检查栈是否为空就直接访问栈顶元素,触发了C++标准中的未定义行为,导致程序在cpp.sh平台挂起。

触发过程

  1. 输入表达式为")",属于右括号集合myset,进入右括号处理分支。
  2. 此时栈mystack是空的(没有任何左括号被压入过),但代码直接执行了mystack.top()。
  3. 根据C++规范,对空栈调用stack::top()是未定义行为——不同环境下可能出现崩溃、挂起、输出异常等情况,在cpp.sh上表现为程序挂起。

修复方法

在访问栈顶元素前,必须先判断栈是否为空:

else if(myset.count(i) == 1)
{
    cout << "Received :: " << i << endl;
    
    // 先检查栈是否为空,避免非法访问
    if(mystack.empty())
    {
        cout << "Non Balanced" << endl;
        break;
    }
    
    if(mymap.at(mystack.top()) == i)
    {
        cout << " Popped: " << mystack.top() << endl;
        mystack.pop();
    }
    else
    {
        cout << "Non Balanced" << endl;
        break;
    }
}

内容的提问来源于stack exchange,提问作者Kumar Roshan Mehta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:17:22