==42==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000001c0 at pc 0x00000034bd79 bp 0x7fffd558d960 sp 0x7fffd558d958

在写某道数组题时,本地调试没问题,上传力扣就出现了该错误,后面发现错误是因为在第5和第7行,先判断arr[i] < arr[i+1],再判断(i+1)<=len,这里i+1可能已经越界了,会导致此错误。
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
int i=0,len = arr.size()-1;
while ((arr[i] < arr[i+1]) && (i+1)<=len) i++;
if (i == 0) return false;
while ((arr[i] > arr[i+1]) && (i+1<=len)) i++;
if (i != len) return false;
return true;
}
};
改成先判断i<len就正确了
class Solution {
public:
bool validMountainArray(vector<int>& arr) {
int i=0,len = arr.size()-1;
while (i<len && arr[i] < arr[i+1]) i++;
if (i == 0 || i ==len) return false;
while (i<len && (arr[i] > arr[i+1])) i++;
if (i != len) return false;
return true;
}
};