【问题标题】:Runtime Error -addition of unsigned offset运行时错误 - 添加无符号偏移量
【发布时间】:2021-09-24 21:12:54
【问题描述】:

我在 leetcode 上解决了这个问题 -

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

示例 1:

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

输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n" ,"a","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

【问题讨论】:

    标签: c++ string function runtime-error


    【解决方案1】:

    问题是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), (1, 4), (2, 3), (3, 2), (4 , 1), (5, 0), (6, -1)

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

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多