AddressSanitizer: heap-buffer-overflow on address 0x602000000534 at pc 0x00000040699d bp 0x7ffce0afd

在写leetcode一道归并排序题的时候,本地执行没有问题,但是提交之后就报了下面这个错误

AddressSanitizer: heap-buffer-overflow on address 0x602000000534 at pc 0x00000040699d bp 0x7ffce0afd7a0 sp 0x7ffce0afd798

看着是溢出、数组越界了,一开始可是我检查了半天,我觉得我的代码逻辑没有任何问题啊,直到我看到我下面的代码

        while(a<m && b<n){
            while(A[a]<=B[b]&&a<m&&b<n){
                c.push_back(A[a]);
                a++;
            }

            while(B[b]<=A[a]&&a<m&&b<n){
                c.push_back(B[b]);
                b++;
            }
        }

我是先判断A[a]<=B[b],再判断a

这样当数据是a[1] = {2}, b[1] = {1}, m = 1, n = 1时,就会造成下面第二个循环先执行判断B[1]<=A[0], 再判断b

所以要把代码改成先判断a

        while(a<m && b<n){
            while(a<m&&b<n&&A[a]<=B[b]){
                c.push_back(A[a]);
                a++;
            }

            while(a<m&&b<n&&B[b]<=A[a]){
                c.push_back(B[b]);
                b++;
            }
        }

你可能感兴趣的:(报错)