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:内存泄漏