7.7动态分配的内存释放之后还能使用么
是的。有些早期的malloc() 文档提到释放的内存中的内容会“保留”, 但这个欠考虑的保证并不普遍而且也不是C 标准要求的。
几乎没有那个程序员会有意使用释放的内存, 但是意外的使用却是常有的事。考虑下面释放单链表的正确代码:
struct list *listp, *nextp;
for(listp = base; listp != NULL; listp = nextp) {
nextp = listp->next;
free(listp);
}
请注意如果在循环表达式中没有使用临时变量nextp, 而使用listp = listp->next会产生什么恶劣后果。
几乎没有那个程序员会有意使用释放的内存, 但是意外的使用却是常有的事。考虑下面释放单链表的正确代码:
struct list *listp, *nextp;
for(listp = base; listp != NULL; listp = nextp) {
nextp = listp->next;
free(listp);
}
请注意如果在循环表达式中没有使用临时变量nextp, 而使用listp = listp->next会产生什么恶劣后果。