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

LeetCode 155. MinStack实现遇运行时错误:空指针偏移问题求助

LeetCode 155题MinStack运行时错误分析

核心错误原因:空vector的越界访问

当第一次调用push方法时,类成员gettingMin是空vector,此时gettingMin.size() - 1计算结果为-1,你直接通过gettingMin[lastIndex]访问该索引,属于vector越界访问,触发未定义行为,这就是你看到的运行时错误的根源。

次要问题:构造函数的冗余局部变量定义

构造函数中重新定义了局部的vector<int> all和vector<int> gettingMin,这两个局部变量会遮蔽类的成员变量,属于无用代码,且容易混淆逻辑,应当删除。

修复方案

1. 修正push方法的空vector判断

修改push逻辑,先检查gettingMin是否为空,避免越界访问:

void push(int val) {
    all.push_back(val);
    if (gettingMin.empty()) {
        gettingMin.push_back(val);
    } else {
        int lastMinVal = gettingMin.back();
        gettingMin.push_back(lastMinVal >= val ? val : lastMinVal);
    }
}

2. 清理构造函数冗余代码

删除构造函数中的局部vector定义:

MinStack() {
    // 移除局部vector声明
}

3. (可选)增强方法健壮性

pop、top、getMin方法可增加空栈判断,避免调用back()或erase空vector的元素(若题目保证调用时栈非空,可省略,但添加判断更健壮):

int top() {
    if (!all.empty()) return all.back();
    // 根据题目要求处理空栈场景,如抛出异常或返回特定值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:22:47