背景:win32+devcpp 5.11
问题:下述代码在本地devcpp运行无误,leetcode报错地址越界
class Solution {
public:
vector<int> num;
vector<int>::iterator it;
vector<vector<int> > minimumAbsDifference(vector<int>& arr) {
vector<vector<int> > mini;
vector<int>::iterator it;
vector<vector<int> >::iterator iter;
sort(arr.begin(),arr.end());//步骤一排序
int t=abs(*(arr.end())-*arr.begin());//t记录最小差值
for(it=arr.begin()+1;it<arr.end();it++){//循环遍历,寻找相邻差中最小的那个
int k=*(it)-*(it-1);//变量k记录从第1项开始,后项与前一项的差值
if(t>k){
swap(t,k);
}
}
for(it=arr.begin()+1;it<arr.end();it++){//循环遍历,寻找差值与记录下的值相等的元素对
vector<int> vec;
if(t==*(it)-*(it-1)){//找到了元素对
// cout<<*(it-1)<<" "<<*it<<endl;
vec.push_back(*(it-1));
vec.push_back(*(it));
mini.push_back(vec);
}
}
return mini;
}
};
仔细排查发现第十行的int t=*arr.end()-*arr.begin();出错,arr.end()返回一个指向最后一个元素后面一位的迭代器,再用*使用该元素,元素不存在,访问越界了。
将其改为:int t=*(arr.end()-1)-*arr.begin();后通过LeetCode检测。
深入一步:为啥devcpp中没有检测出这个bug?