Foros del Web » Programación para mayores de 30 ;) » C/C++ »

listas doblemente vinculadas

Estas en el tema de listas doblemente vinculadas en el foro de C/C++ en Foros del Web. Estoy trabajando con listas y queria hacer una funcion que reserve memoria para un nuevo elemento y lo enlazase a la lista. ¿Hay algun problema ...
  #1 (permalink)  
Antiguo 02/04/2007, 11:09
 
Fecha de Ingreso: abril-2007
Mensajes: 1
Antigüedad: 17 años, 1 mes
Puntos: 0
listas doblemente vinculadas

Estoy trabajando con listas y queria hacer una funcion que reserve memoria para un nuevo elemento y lo enlazase a la lista. ¿Hay algun problema por utilizar malloc dentro de una funcion?¿Se libera esa memoria una vez se retorna a main?

void NuevoNodo(struct nodo **lista, int direccion[])
{
struct nodo *cabeza;
cabeza=(struct nodo *)malloc(sizeof(struct nodo));
cabeza->siguiente=*lista;

/*Introducir los datos de la cabeza actualizada*/
cabeza->anterior=(*lista)->anterior;
cabeza->posicion[0]=(*lista)->posicion[0]+direccion[0];
cabeza->posicion[1]=(*lista)->posicion[1]+direccion[1];
(*lista)->anterior=cabeza; //enlazar la cabeza con el resto

/*Reapuntar a la cabeza*/
*lista=cabeza;

return;
}
  #2 (permalink)  
Antiguo 02/04/2007, 12:54
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: listas doblemente vinculadas

No se libera automanticamente, tienes que hacerlo tu con la funcion free,.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 05/04/2007, 22:03
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: listas doblemente vinculadas

Cita:
Iniciado por Mnephet Ver Mensaje
Estoy trabajando con listas y queria hacer una funcion que reserve memoria para un nuevo elemento y lo enlazase a la lista. ¿Hay algun problema por utilizar malloc dentro de una funcion?¿Se libera esa memoria una vez se retorna a main?

void NuevoNodo(struct nodo **lista, int direccion[])
{
struct nodo *cabeza;
cabeza=(struct nodo *)malloc(sizeof(struct nodo));
cabeza->siguiente=*lista;

/*Introducir los datos de la cabeza actualizada*/
cabeza->anterior=(*lista)->anterior;
cabeza->posicion[0]=(*lista)->posicion[0]+direccion[0];
cabeza->posicion[1]=(*lista)->posicion[1]+direccion[1];
(*lista)->anterior=cabeza; //enlazar la cabeza con el resto

/*Reapuntar a la cabeza*/
*lista=cabeza;

return;
}
En realidad almacenar memoria dentro de una funcion es como usar una variable static dentro de una funcion. Muy parecido, pero siempre tienes que liberarlo, tarde o temprano, asi que mas vale que no pierdas la direccion del puntero para poder liberar.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:03.