LeetCode 707 设计链表代码中heap-use-after-free错误排查求助
LeetCode 707 设计链表代码中heap-use-after-free错误排查求助
我最近在做LeetCode的「设计链表」题目时,写了下面的C语言实现,但运行测试时遇到了堆内存释放后仍被使用的错误,想请大家帮忙找出问题所在。
以下是我的实现代码:
typedef struct MyLinkedList{ int val; struct MyLinkedList *next; } MyLinkedList, *LinkList; MyLinkedList* myLinkedListCreate() { LinkList p = (LinkList)malloc(sizeof(MyLinkedList)); p->val = 0; p->next = NULL; return p; } int myLinkedListGet(MyLinkedList* obj, int index) { int i = 0; LinkList p = obj; while(p != NULL){ if(i == index) return p->val; else{ p = p->next; i++; } } return -1; } void myLinkedListAddAtHead(MyLinkedList* obj, int val) { MyLinkedList *new = (MyLinkedList *)malloc(sizeof(MyLinkedList)); new->val = val; new->next = obj; obj = new; } void myLinkedListAddAtTail(MyLinkedList* obj, int val) { MyLinkedList *tail = (MyLinkedList *)malloc(sizeof(MyLinkedList)); tail->next = NULL; tail->val = val; LinkList p = obj; while(p->next != NULL){ p = p->next; } p->next = tail; } void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) { MyLinkedList *node = (MyLinkedList*)malloc(sizeof(MyLinkedList)); node->val = val; LinkList p = obj; for(int i = 0; i != index - 1; i++){ p = p->next; } if(p == NULL) return; node->next = p->next; p->next = node; } void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) { LinkList p = obj; int i = 0; if(index < 0) return ; if(index == 0){ LinkList q = obj; obj = obj->next; free(q); return ; } while(i != index - 1){ p = p->next; } LinkList q; q = p->next; p->next = p->next->next; free(q); } void myLinkedListFree(MyLinkedList* obj) { LinkList p = obj; while (p) { LinkList q = p; p = p->next; //maybe this line wrong free(q); } }
题目提供的代码模板说明,我的实现会被这样调用:
/** * Your MyLinkedList struct will be instantiated and called as such: * MyLinkedList* obj = myLinkedListCreate(); * int param_1 = myLinkedListGet(obj, index); * myLinkedListAddAtHead(obj, val); * myLinkedListAddAtTail(obj, val); * myLinkedListAddAtIndex(obj, index, val); * myLinkedListDeleteAtIndex(obj, index); * myLinkedListFree(obj); */
当我运行LeetCode的测试用例时,收到了如下错误:
22ERROR: AddressSanitizer: heap-use-after-free on address 0x602000000718 at pc 0x55b42a509da3 bp 0x7fffa049ff00 sp 0x7fffa049fef0
请问我的代码里哪里存在bug,导致了这个heap-use-after-free错误呢?
备注:内容来源于stack exchange,提问作者Clay_Han
相关产品推荐
相关产品推荐

