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

出现问题题目:、​​、​​​​203. 移除链表元素 - 力扣(LeetCode)

题解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

原因:删除内存后不应该用指针再次使用这块内存

错误代码1:

p=head;
 pre=head;
 while(head&&(head->val==val))
        {
            ListNode *tmp=head;
            head=head->next;
            delete tmp;
           // return head;
            //delete p;
        }
while(p)
{
......
}
       

p先指向head,后面本来的head已经由delete tmp删除,但`while(p)`**又使用了指向原来head的p**,出现错误

错误代码2:

 ListNode *tmp2=p;
 pre->next=p->next;
 delete tmp2;
 p=p->next;

已删除p指向的内存,但仍使用p

正确代码见题解 

 

你可能感兴趣的:(leetcode,算法,职场和发展,链表)