prev up next   top/contents search

comp.lang.c FAQ 列表· 第 7.20 题

您不能在使用释放(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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管