ddressSanitizer: heap-use-after-free on address.....

 LeetCode翻转链表力扣

报错代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* curv=NULL;
        ListNode* prev=NULL;
        ListNode* nextv=NULL;
        if(head == NULL || head->next == NULL) return head;
        prev = head;
        curv = prev->next;
        while(curv){
            
            nextv = curv->next;
            curv->next = prev;
            prev = curv;
            curv = nextv;
        }

    return prev;  

    }
};

正确代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* curv=NULL;
        ListNode* prev=NULL;
        ListNode* nextv=NULL;
        if(head == NULL || head->next == NULL) return head;
        curv =head ;
        while(curv){
            
            nextv = curv->next;
            curv->next = prev;
            prev = curv;
            curv = nextv;
        }

    return prev;  

    }
};

区别在于prev = head;
        curv = prev->next;

改成  curv =head;

错误分析:

Use after free:访问堆上已经被释放的内存
Heap buffer overflow:堆上缓冲区访问溢出
Stack buffer overflow:栈上缓冲区访问溢出
Global buffer overflow:全局缓冲区访问溢出
Use after return:访问栈上已被释放的内存
Use after scope:栈对象使用超过定义范围
Initialization order bugs:初始化命令错误
Memory leaks:内存泄漏

Guess you like

Origin blog.csdn.net/intmain_S/article/details/121495648