首页 > 解决方案 > 如何从 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中:如果它出现在一些但似乎没有释放第一个节点,它从第二个节点开始。

标签: cmemory-managementstructlinked-listsingly-linked-list

解决方案


选项 2 似乎还可以。选项 1 释放内存然后尝试访问它,这是错误的。


推荐阅读