这是破坏循环链表的代码。当它运行时,它会产生一个中止陷阱6:释放的指针未被分配
NODE *roamer = list->head;
do{
NODE *oldRoamer = roamer;
roamer = roamer->next;
printf("freeing prev");
free(oldRoamer);
printf("prev freed");
}while (roamer != NULL);
该程序多次打印两个printf语句,但在打印“freeing prev”后立即给出错误。
答案 0 :(得分:3)
它的循环。这意味着最后一个项目指向第一个已经被释放的项目。
do
....
while (roamer != list->head);
答案 1 :(得分:0)
用于停止循环的条件不正确。
NODE *roamer = list->head;
do {
NODE *oldRoamer = roamer;
roamer = roamer->next;
printf("freeing prev");
free(oldRoamer);
printf("prev freed");
} while (roamer != list->head);
// Stop when roamer reaches back to head