中止陷阱6:释放未分配的指针

时间:2015-02-28 01:02:31

标签: c linked-list

这是破坏循环链表的代码。当它运行时,它会产生一个中止陷阱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”后立即给出错误。

2 个答案:

答案 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