微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行时错误 - 添加无符号偏移量

如何解决运行时错误 - 添加无符号偏移量

我是在 leetcode 上解决这个问题的 -

编写一个反转字符串的函数。输入字符串给出为 一个字符数组。

示例 1:

输入:s = ["h","e","l","o"] 输出:["o","h" ] 例子 2:

输入:s = ["H","a","n","h"] 输出:["h","H"]

我写了这个解决方案,它给出了一个运行时错误:无符号偏移量的添加

class Solution {
public:
    
    void funToReverse(int left,int right,vector<char> &s){
        if(left==right)
            return;
        else{
            char temp = s[left];
            s[left]=s[right];
            s[right]=temp;
            funToReverse(left+1,right-1,s);
        }
    }
    
    void reverseString(vector<char>& s) {
        int left =0;
        int right = s.size()-1;
        
        
        funToReverse(left,right,s);
    }
};

错误

第 1034 行:字符 34:运行时错误:将无符号偏移添加到 0x6020000001b0 溢出到 0x6020000001af (stl_vector.h) 总结: UndefinedBehaviorSanitizer:未定义行为 /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:34

解决方法

问题在于,leftright 可能会相互传递,而不会是相同的值。解决这个问题的方法是:

class Solution {
public:
    
    void funToReverse(int left,int right,vector<char> &s){
        if(left>=right) // Check if left has reached right
            return;
        else{
            char temp = s[left];
            s[left]=s[right];
            s[right]=temp;
            funToReverse(left+1,right-1,s);
        }
    }
    
    void reverseString(vector<char>& s) {
        int left =0;
        int right = s.size()-1;
        
        
        funToReverse(left,right,s);
    }
};

如果有奇数个元素,那么 (left,right) 是这样的: (0,4),(1,3),(2,2)

然而,如果元素个数为偶数,left 将通过 right 但永远不会相同:(0,5),(3,2),(4,1),(5,0),(6,-1)

请注意,在这种情况下,left 一直到 6,而 right 一直到 -1,这是无效的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。