有没有对空指针应用非零偏移量18446744073709551612?

问题描述 投票:0回答:1

Leet代码 问题名称:155.最小堆栈

我试图解决这个问题,但每次都会遇到运行时错误。你愿意帮我解决吗?


class MinStack {
   
public:
        vector<int> all;
        vector<int>gettingMin;
    MinStack() {
        vector<int> all;
        vector<int>gettingMin;
    }
    
    void push(int val) {
        all.push_back(val);
        int lastIndex = gettingMin.size() - 1;
        int lastMinVal = gettingMin[lastIndex];
        if(lastMinVal >= val) gettingMin.push_back(val);
        else gettingMin.push_back(lastMinVal);
    }
    
    void pop() {
        int lastIndex = gettingMin.size() - 1;
        if(lastIndex < 0) return;
        all.erase(all.begin()+lastIndex);
        gettingMin.erase(gettingMin.begin()+lastIndex);
    }
    
    int top() {
        int val = all.back();
        return val;
    }
    
    int getMin() {
        int val = gettingMin.back();
        return val;
    }
};

错误:

Line 1041: Char 34: runtime error: applying non-zero offset 18446744073709551612 to null pointer (stl_vector.h) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1046:34

发生运行时错误,帮助我理解。

c++ runtime-error
1个回答
0
投票

push()
函数中,我没有检查空向量。添加以下检查器即可解决问题。

if(gettingMin.size() == 0)
    {
        gettingMin.push_back(val);
        return;
    }
© www.soinside.com 2019 - 2024. All rights reserved.