while(current != NULL) { free(current); current = current->next; }
理论上不能,实践中有可能 -- 主要看你的free是否会引起下层堆管理器释放内存页还给操作系统。
这个和返回局部变量指针的性质差不多,属于错误代码,虽然有个别情况能运行正确。 while(current != NULL) { tmp = current->next; free(current); current = tmp; }
对current执行free操作后,之前current指向的内存已经被收回,不能再访问,而current->next是属于这块内存的一部分,所以不能访问。
使用一个临时变量先保存current->next 然后再释放current 你这样的结果是未定义的
[quote=引用 2 楼 brookmill 的回复:] 这个和返回局部变量指针的性质差不多,属于错误代码,虽然有个别情况能运行正确。 while(current != NULL) { tmp = current->next; free(current); current = tmp; }
70,020
社区成员
243,264
社区内容
加载中
试试用AI创作助手写篇文章吧