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

逆波兰表达式求值代码触发运行时错误,请求排查修复

逆波兰表达式求值运行时错误排查

报错信息

Line 171: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for type 'int', which requires 4 byte alignment (stl_deque.h)
0xbebebebebebec0ba: note: pointer points here
<memory cannot be printed>
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_deque.h:180:16

问题代码

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        int n {static_cast<int>(tokens.size())}, x {0}, y{0};
        stack<int> st;
        for (int i =0; i<n; i++){
            if ( (tokens[i][0] >= '0')&&(tokens[i][0] <= '9') ){
                st.push(tokens[i][0] - '0');
            }else{
                y = st.top();
                st.pop();
                x = st.top();
                st.pop();
                switch(tokens[i][0]){
                    case '+':
                        st.push(x+y);
                        break;
                    case '-':
                        st.push(x-y);
                        break;
                    case '*':
                        st.push(x*y);
                        break;
                    case '/':
                        st.push(x/y);
                        break;
                }
            }
        }
        return st.top();
    }
};

错误含义与代码问题分析

对齐错误的本质

报错里的“错误对齐地址访问”只是表象,实际原因是访问了空栈的top()。0xbebebebebebec0ba是内存填充标记,代表当前访问的是已释放或未初始化的无效内存。当栈为空时调用st.top(),返回的内存地址不符合int类型要求的4字节对齐规则,因此被UndefinedBehaviorSanitizer检测并报错。

代码的核心错误

  1. 数字判断逻辑漏洞:
    代码仅通过字符串第一个字符是否为数字来判断是否是数值,但负数(如"-12")的第一个字符是'-',会被错误归类为运算符。此时栈中可能没有足够元素,调用st.top()就会触发空栈访问的未定义行为。
  2. 数字转换不完整:
    即使是正数(如"123"),代码只取第一个字符转换为int(比如"123"会被转成1而非123),导致栈内存储的数值完全错误,后续计算逻辑混乱,最终也可能引发栈空访问。

为什么部分编译器能正常运行?

未定义行为的结果是不确定的:

  • 部分在线编译器未启用UndefinedBehaviorSanitizer这类严格的内存检测工具,即使访问空栈也不会立刻报错;
  • 若测试用例未包含负数或多位数,代码的错误不会被触发,看起来能正常运行。但LeetCode的测试用例覆盖了这些场景,且启用了严格检测,因此暴露了问题。

内容的提问来源于stack exchange,提问作者prasun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:40:34