力扣第二题
记录一下错误原因。虽然错误描述看不懂,但原因是自己的指针指向了自己。
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版权协议,转载请附上原文出处链接和本声明。