我有一个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;