问您不能在使用释放(free)后继续使用动态分配的内存,对吗?
答不可以。早期关于malloc的一些文档曾指出,已释放内存的内容“保持不变”,但这种不明智的保证从未普遍存在,C 标准也不要求它。
很少有程序员会故意使用已释放内存的内容,但意外这样做却很容易。考虑以下(正确的)释放单向链表的代码
struct list *listp, *nextp; for(listp = base; listp != NULL; listp = nextp) { nextp = listp->next; free(listp); }并注意如果使用更直观的循环迭代表达式listp = listp->next,而不是临时的nextp指针,会发生什么。
参考:K&R2 第 7.8.5 节 p. 167
ISO 第 7.10.3 节
Rationale 第 4.10.3.2 节
H&S 第 16.2 节 p. 387
CT&P 第 7.10 节 p. 95