8.17 动态分配的内存一旦释放之后你就不能再使用, 是吧?

是的。有些早期的 malloc() 文档提到释放的内存中的内容会 ``保留", 但这个欠考虑 的保证并不普遍而且也不是 C 标准要求的。

几乎没有那个程序员会有意使用释放的内存, 但是意外的使用却是常有的事。 考虑下面释放单链表的正确代码:

    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)