我是c++的新手,我正在努力解决LeetCode中的3求和问题。但是,我无法处理这个称为“堆缓冲区溢出”的错误。
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
int numslen = nums.size();
sort(nums.begin(), nums.end());
int i = 0;
while(i < numslen - 2){
int start = i + 1;
int end = numslen - 1;
while (start < end) {
if (nums[i] + nums[start] + nums[end] == 0) {
res.push_back({ nums[i], nums[start], nums[end] });
end--;
while (nums[end] == nums[end+1]) { end--; }
}
else if (nums[i] + nums[start] + nums[end] > 0) { end--; }
else { start++; }
}
i++;
while (nums[i] == nums[i - 1]) { i++; }
}
return res;
}这是错误消息。
AddressSanitizer: heap-buffer-overflow on address 0x60200000044c at pc 0x000000406c74 bp 0x7ffd2a1cd0d0 sp 0x7ffd2a1cd0c8发布于 2019-05-17 12:09:42
while (nums[i] == nums[i - 1]) { i++;}应该是
while (i < numslen && nums[i] == nums[i - 1]) { i++;}第一次执行上述循环时,i和i-1保证在范围内.但是,如果nums有尾随重复的数字呢?您的版本将在无效内存上读到“永远”。
https://stackoverflow.com/questions/56185853
复制相似问题