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
相关产品推荐
相关产品推荐

