几乎没有那个程序员会有意使用释放的内存, 但是意外的使用却是常有的事。 考虑下面释放单链表的正确代码:
struct list *listp, *nextp; for(listp = base; listp != NULL; listp = nextp) { nextp = listp->next; free(listp); }请注意如果在循环表达式中没有使用临时变量 nextp, 而使用 listp = listp-> next会产生什么恶劣后果。
参考资料: [K&R2, Sec. 7.8.5 p. 167]; [ISO, Sec. 7.10.3]; [Rationale, Sec. 4.10.3.2]; [H&S, Sec. 16.2 p. 387]; [CT&P, Sec. 7.10 p. 95]。
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)