ERROR: AddressSanitizer: heap-use-after-free on address

力扣第二题

记录一下错误原因。虽然错误描述看不懂,但原因是自己的指针指向了自己。
heap堆
heap-use-after-free on address 释放地址后使用堆。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* tail;  //执行指针
        ListNode* tou=new ListNode();//头指针
		tou->next=nullptr;
        tail=tou;
        int next=0;     //产生的进位
		while(l1||l2){
			int sum=0;
			if(l1!=NULL){
				sum+=l1->val;
				l1=l1->next;
			}
			if(l2!=NULL){
				sum+=l2->val;
				l2=l2->next;
			}
			sum+=next;
		//	printf("%d,%d,%d\n",l1->val,l2->val,next);
            next=sum/10;
		//	printf("进位是%d\n",next);
			//printf("取余%d\n",sum%10);
            ListNode*s;
            s=new ListNode(sum%10);
            tail->next=s;
            tail=tail->next;            //尾插法
			if(l1==nullptr&&l2==nullptr&&next!=0){     //特殊情况
				ListNode *s2=new ListNode(next);
				tail->next=s;         //错误这=s2
			    tail=tail->next;
            //   printf("进位位%d\n",next);
			}
        }
		tou=tou->next;
        return tou;
    }
};
=================================================================
==42==ERROR: AddressSanitizer: heap-use-after-free on address 0x6020000002d8 at pc 0x00000037adfd bp 0x7ffde52408c0 sp 0x7ffde52408b8
READ of size 8 at 0x6020000002d8 thread T0
    #2 0x7fdc373c20b2  (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
0x6020000002d8 is located 8 bytes inside of 16-byte region [0x6020000002d0,0x6020000002e0)
freed by thread T0 here:                    //释放一次
    #3 0x7fdc373c20b2  (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
previously allocated by thread T0 here:    //先前被T0分配
    #3 0x7fdc373c20b2  (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
Shadow bytes around the buggy address:
  0x0c047fff8000: fa fa fd fa fa fa fd fa fa fa 00 00 fa fa 00 00
  0x0c047fff8010: fa fa 00 00 fa fa 00 00 fa fa 00 00 fa fa 00 00
  0x0c047fff8020: fa fa 00 00 fa fa fd fa fa fa fd fa fa fa 00 00
  0x0c047fff8030: fa fa 00 00 fa fa 00 00 fa fa 00 00 fa fa 00 00
  0x0c047fff8040: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd
=>0x0c047fff8050: fa fa fd fd fa fa fd fd fa fa fd[fd]fa fa 00 00
  0x0c047fff8060: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd
  0x0c047fff8070: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fa fa
  0x0c047fff8080: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8090: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff80a0: 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
  Shadow gap:              cc
==42==ABORTING

在这里插入图片描述


版权声明:本文为yah17763312367原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。