在写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++;
}
}