首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3求和实现上的堆缓冲区溢出

3求和实现上的堆缓冲区溢出
EN

Stack Overflow用户
提问于 2019-05-17 11:51:25
回答 1查看 109关注 0票数 1

我是c++的新手,我正在努力解决LeetCode中的3求和问题。但是,我无法处理这个称为“堆缓冲区溢出”的错误。

代码语言:javascript
复制
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;
}

这是错误消息。

代码语言:javascript
复制
AddressSanitizer: heap-buffer-overflow on address 0x60200000044c at pc 0x000000406c74 bp 0x7ffd2a1cd0d0 sp 0x7ffd2a1cd0c8
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 12:09:42

代码语言:javascript
复制
while (nums[i] == nums[i - 1]) { i++;}

应该是

代码语言:javascript
复制
while (i < numslen && nums[i] == nums[i - 1]) { i++;}

第一次执行上述循环时,i和i-1保证在范围内.但是,如果nums有尾随重复的数字呢?您的版本将在无效内存上读到“永远”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56185853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档