elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No se añade elemento nuevo en una lista enlazada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No se añade elemento nuevo en una lista enlazada  (Leído 2,195 veces)
NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
No se añade elemento nuevo en una lista enlazada
« en: 22 Abril 2013, 11:23 am »

Buenas, mi problema es el siguiente. Tengo una lista simplemente enlazada que la inicializo con los elementos de un array generados aleatoriamente. Esos elementos se insertan sin problema en la lista, pero cuando lo inserto manualmente, por el teclado por ejemplo, no se añade a la lista (o si se añade, no se visualiza). A ver si me podéis ayudar.

La estructura:

Código
  1. typedef struct lista{
  2. int numero;
  3. struct lista *siguiente;
  4. }LISTA;

La función para crear la lista
Código
  1. LISTA *crearLista(int num)
  2. {
  3. LISTA *lista;
  4.  
  5. lista = (LISTA*) malloc( sizeof(LISTA) );
  6.  
  7. lista->numero= num;
  8. lista->siguiente= NULL;
  9.  
  10. return lista;
  11. }
La función de añadir un elemento:

Código
  1. LISTA *anyadirElementoAlPrincipio(int num, LISTA *lista)
  2. {
  3. LISTA *nodo_nuevo;
  4.  
  5. nodo_nuevo= (LISTA*) malloc( sizeof(LISTA) );
  6. if(nodo_nuevo == NULL)
  7. printf("\nNo hay sitio para más números.\n");
  8.  
  9.        else
  10.        {
  11.        nodo_nuevo->numero = num;
  12.        nodo_nuevo->siguiente= lista;
  13.        }
  14.  
  15. return nodo_nuevo;
  16. }
  17.  

La función de ver la lista entera:

Código
  1. void mostrarLista(LISTA *lista)
  2. {
  3. printf("%d\n", lista->numero);
  4.  
  5. if(lista->siguiente != NULL)
  6. mostrarLista(lista->siguiente);
  7. }

En el main el uso de la función de añadir un elemento es exactamente igual con los elementos del array y con el introducido desde el teclado... Si ayudara en algo, decídmelo y lo pongo también.

Gracias de antemano y saludos.

PD: aprovecho para preguntar una duda que me ha surgido, cuando se llama a la función de añadir elementos, ¿no habría que liberar con free() el espacio reservado para el nodo que se usa en la función?


« Última modificación: 22 Abril 2013, 11:28 am por NathanD » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: No se añade elemento nuevo en una lista enlazada
« Respuesta #1 en: 22 Abril 2013, 14:25 pm »

Esos elementos se insertan sin problema en la lista, pero cuando lo inserto manualmente, por el teclado por ejemplo, no se añade a la lista (o si se añade, no se visualiza). A ver si me podéis ayudar.
En lo general ese fragmento no tiene problemas salvo dos detalles: falta de consistencia (hay que verificar el valor de retorno de malloc en todas sus llamadas) y el problema con la función "mostrarLista" si se trata de imprimir una lista vacía.

Mejor publica el código fuente completo.

PD: aprovecho para preguntar una duda que me ha surgido, cuando se llama a la función de añadir elementos, ¿no habría que liberar con free() el espacio reservado para el nodo que se usa en la función?
No porque estarías liberando la memoria del nodo recién agregado.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
NathanD

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: No se añade elemento nuevo en una lista enlazada
« Respuesta #2 en: 23 Abril 2013, 10:05 am »

Muchas gracias por responder rir3760, pero ya he descubierto mi fallo.

Para ejecutar las opciones, usaba la siguiente función:

Código
  1. void ejecutarOpcion(LISTA *lista, int opcion);

No me había dado cuenta de cuál era el fallo hasta que he copiado esa función en el main y sí funcionaba. En como parámetro tenía que pasarle la dirección de memoria de la lista, entonces había que definir el parámetro con un doble puntero, para que los cambios afectaran a todo el programa y no sólo en la función. Me alegro de haber podido corregir el fallo por mi cuenta  :D

De nuevo, gracias por tu atención.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con lista enlazada
Programación C/C++
Lain0x 2 3,417 Último mensaje 8 Julio 2011, 13:20 pm
por Valkyr
Ayuda con lista enlazada
Java
netca 2 3,166 Último mensaje 20 Abril 2012, 16:11 pm
por adwind
Insertar un elemento ordenadamente en una lista enlazada simple
Programación C/C++
NathanD 4 26,588 Último mensaje 27 Abril 2013, 14:25 pm
por NathanD
borrar elemento de la lista enlazada simple
Programación C/C++
d91 2 3,274 Último mensaje 9 Junio 2014, 13:44 pm
por d91
Eliminar ultimo elemento de la lista enlazada C++
Programación C/C++
nurnain 2 5,364 Último mensaje 21 Marzo 2020, 01:48 am
por dijsktra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines