Letcode 오류 AddressSanitizer: heap-buffer-overflow on address 0x603000000028

3148 단어
1. 코드부터 보고 붙이자


int singleNumber(int* nums, int numsSize){
    int i = 1;
    int data;
    
    data = nums[0];
    while (i < numsSize) {
        if (data != nums[i]) {
            i++;
        }
        else {
            i += 2;
            data = nums[i+1];
        }
    }
    return data;
}


 
  • 2.제목 설명: leetcode 136 한 번만 나오는 숫자
  • 원소가 한 번만 나타나는 것을 제외하고 나머지 모든 원소는 두 번 나타나는 비공정수 그룹을 지정합니다.한 번만 나타난 그 원소를 찾아내라.
    설명:
    너의 알고리즘은 반드시 선형 시간 복잡도를 가지고 있어야 한다.너는 추가 공간을 사용하지 않고 실현할 수 있니?
       1:
    
      : [2,2,1]
      : 1
    
       2:
    
      : [4,1,2,1,2]
      : 4

     
  • 3.오류 정보
  • 코드가 긴 오류를 보고했는데 이상하게도 VScode 환경 debug를 사용할 때 오류가 발생하지 않았다.검색 결과 LeetCode가 AddressSanitizer를 사용하여 메모리에 대한 불법 액세스를 확인했습니다. 이 문제는 메모리에 대한 불법 액세스를 확인한 것입니다. 여기서 문제가 발생했습니다.
    else {
    
                i += 2;
    
                data = nums[i+1];
    
            }

     
    데이터 값을 부여하기 전에 i+2 작업을 하고num[i+1]를 실행할 때 i가 크기 값보다 크면 수조nums[]가 경계를 넘을 수 있으며 수정 후 ok를 실행합니다
     else {
    
                data = nums[i+1];
    
                 i += 2;
    
            }

     
  • 4.오류 메시지 첨부
  • ==30==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000000028 at pc 0x0000004018d1 bp 0x7ffc7efb9960 sp 0x7ffc7efb9958
    
    READ of size 4 at 0x603000000028 thread T0
    
        #2 0x7f54691a52e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
    
    
    
    0x603000000028 is located 4 bytes to the right of 20-byte region [0x603000000010,0x603000000024)
    
    allocated by thread T0 here:
    
        #0 0x7f546a62f2b0 in malloc (/usr/local/lib64/libasan.so.5+0xe82b0)
    
        #3 0x7f54691a52e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
    
    
    
    Shadow bytes around the buggy address:
    
      0x0c067fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
      0x0c067fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
      0x0c067fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
      0x0c067fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
      0x0c067fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
    =>0x0c067fff8000: fa fa 00 00 04[fa]fa fa fa fa fa fa fa fa fa fa
    
      0x0c067fff8010: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
      0x0c067fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
      0x0c067fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
      0x0c067fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
      0x0c067fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
    Shadow byte legend (one shadow byte represents 8 application bytes):
    
      Addressable:           00
    
      Partially addressable: 01 02 03 04 05 06 07
    
      Heap left redzone:       fa
    
      Freed heap region:       fd
    
      Stack left redzone:      f1
    
      Stack mid redzone:       f2
    
      Stack right redzone:     f3
    
      Stack after return:      f5
    
      Stack use after scope:   f8
    
      Global redzone:          f9
    
      Global init order:       f6
    
      Poisoned by user:        f7
    
      Container overflow:      fc
    
      Array cookie:            ac
    
      Intra object redzone:    bb
    
      ASan internal:           fe
    
      Left alloca redzone:     ca
    
      Right alloca redzone:    cb
    
    ==30==ABORTIN

    좋은 웹페이지 즐겨찾기