c - 如何从 C 中的链表中正确释放内存?
问题描述
C中的链表
假设我有一个简单的列表并且已经插入了几个节点。这些释放内存的选项中哪个是正确的 1 或 2?他总是告诉我不要碰节点*头
#include <stdio.h>
#include <stdlib.h>
typedef struct _Nodo{
int dato;
struct _Nodo *siguiente;
}Nodo;
//Prototipos
void LiberarNodos( Nodo *cabeza);
int main(){
Nodo *cabeza=NULL;
return 0;
}
//OPCION 1
void LiberarNodos( Nodo *cabeza){
Nodo *test;
test=cabeza;
while( test !=NULL){
free(test);
test=test->siguiente;
}
}
//OPCION 2
void LiberarNodos( Nodo *cabeza){
Nodo *test;
while( cabeza !=NULL){
test=cabeza;
cabeza=cabeza->siguiente;
free(test);
}
}
在选项1中:是我提出的,但我在任何教程中都没有看到它
在选项2中:如果它出现在一些但似乎没有释放第一个节点,它从第二个节点开始。
解决方案
选项 2 似乎还可以。选项 1 释放内存然后尝试访问它,这是错误的。
推荐阅读
- mysql - 这种关系是 OneToMany 还是 ManyToMany?
- github - 如何在未经管理员许可的情况下访问 Github 和 Bitbucket 上的私有存储库
- r - ggplot R具有相同比例的多个直方图
- r - 编译的 R 代码实际上比启用 JIT 的纯 R 慢
- php - 如何使用来自不和谐 oauth2 登录的访问令牌来获取用户信息
- oracle - Oracle,用户无法访问表空间
- json - 用 JQ 填充 JSON 数组以获得矩形结果
- r - 包含 na.action=na.pass 时 caretEnsemble 失败
- excel - 当 Cell 被写入时,放置时间而不是更新更多
- aframe - Aframe:如何用js设置实体类?