runtime error: reference binding to null pointer of type 'int' (stl_vector.h) : LeetoCode 907

runtime error: reference binding to null pointer of type 'int' (stl_vector.h) : LeetoCode 907

我正在尝试 907.Leetcode 上的子数组最小值之和

我一直收到这个错误:

Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9

这是我尝试过的方法(我知道这很天真,很可能会 TLE,但我也想知道哪里出了问题,所以它不起作用):-

class Solution {
public:
    int sumSubarrayMins(vector<int>& arr) {
        vector<int> ans;
        int sum =0; 
        int mn=0;
        int m = 1000000007;
        int n = arr.size();
        for(int i = 0 ; i<n; i++){
            for(int j = i; j<n; j++){
                for(int k = i; k<j; k++){
                    ans.push_back(arr[k]);
                }
                sort(ans.begin(), ans.end());
                mn = ans[0];
                sum = sum + mn;
                ans.clear();
            }
        }
        return sum%m;
    }
};

发生了什么事?

在第一次迭代中,

  • ans没有元素
  • i = 0
  • j = i (j = 0)

然后没有元素将被推送到 ans 因为 i < j 是假的。

因此,mn = ans[0]; 是无效的超出范围访问,因为 ans 仍然没有元素。