我正在解决一个关于Leetcode(下一个排列)的问题。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-2;
while(i>=0 && nums[i]>nums[i+1])
{
i--;
}
int j=nums.size()-1;
if(i>=0)
{
while(j>=0 && nums[j]<=nums[i]){
j--;
}
swap(nums[i],nums[j]);
}
reverse(nums.begin()+i+1,nums.end());
}
};这是我唯一需要编辑的部分。在运行它时,我得到了以下错误
Line 1034: Char 34: runtime error: addition of unsigned offset to 0x602000000470 overflowed to 0x60200000046c (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:34发布于 2021-10-20 12:41:36
如果为nums = [1,1,1],将执行以下代码:
while(j>=0 && nums[j]<=nums[i]){
j--;
}直到j=-1,下面的代码会导致向量溢出:
swap(nums[i],nums[j]);然后你的这个错误信息就会出现。
https://stackoverflow.com/questions/66670865
复制相似问题