我不确定以何种方式释放我的 Item
的 list
。每个list
都有第一个和最后一个项目,每个item
都链接到nextItem
直到它为空。
for(myItem=list.firstItem; myItem!=list.lastItem; myItem=myItem->nextItem)
dealloc(myItem);
或
for(myItem=list.firstItem; myItem!=NULL; myItem=myItem->nextItem)
dealloc(myItem);
myItem->nextItem = NULL
如果myItem=list.lastItem
。
我不确定使用 for 的第一个声明是否会释放所有 myItem
或者最后一个Item是否不会被释放。 (我相信这将会发生。)
另一方面,我不确定当您分配给 NULL
a myItem
时,第二个声明是否会使一切崩溃/无法正常工作。
最佳答案
两个程序都有未定义的行为,因为您在释放 myItem
指针后取消引用它。这是不允许的,并且可能会使您的程序崩溃。
释放链表的正确方法是使用 while
循环,当您首先获取 next
指针时,然后才释放节点:
ItemNode *myItem = list.firstItem;
while (myItem != NULL) {
ItemNode *tmp = myItem;
myItem = myItem->nextNode;
dealloc(tmp);
}
关于C - 链表for循环疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596773/