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<m&&b<n

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

所以要把代码改成先判断a<m&&b<n,再判断A[a]<=B[b]和B[b]<=A[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++;
            }
        }
发布了46 篇原创文章 · 获赞 1 · 访问量 2400

猜你喜欢

转载自blog.csdn.net/weixin_43708069/article/details/104629747