在Leetcode中获取heap-use-after-free



我有一个Leetcode问题,No.142,链表循环II。我的代码是这样的:

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode *detectCycle(struct ListNode *head) {
struct ListNode *flag = (struct ListNode *)malloc(sizeof(struct ListNode));
int count = 0;
while (head != NULL) {
if (head -> next == flag) {
free(flag);
return head -> val;
}
head -> val = count;
++count;
struct ListNode *p = head;
head = head -> next;
p -> next = flag;
}
free(flag);
return -1;
}

运行后,我得到heap-use-after-free错误。我该怎么修理它?

在flag空闲之前使用临时变量存储head->val,然后返回val,参见下面的代码。

if (head -> next == flag) {
int val = head->val;    
free(flag);
return val;
}

在你的代码中只有两个地方,你在释放内存。我只是在处理你得到的错误。我会修改代码,使其具有单个返回&

int returnVal = -1;
while loop  {
if (head -> next == flag) {
returnVal = head->val;
break;     //exit while loop
} else  {
.
.
.

}
}     // end while
free(flag);
return returnVal;

最新更新