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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al insertar en listas abiertas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al insertar en listas abiertas.  (Leído 3,000 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Problema al insertar en listas abiertas.
« en: 2 Diciembre 2010, 12:15 pm »

Saludos.
El tema de las listas en C me esta volviendo loco, a ver si podéis ayudarme en el siguiente error.
Tengo la siguiente lista abierta, el caso es que el programa me compila pero supuestamente en la lista solo esta el primer elemento, a la hora de mostrármela solo me muestra el 4.
Código:
#include <stdio.h>
#include <stdlib.h>

typedef struct listacompleta {
         int dato;
         struct listacompleta *next;
        }lista;

lista *primero;

void add_nod(int dato){
  lista *nuevo,*aux;
  nuevo = (lista *) malloc (sizeof(lista));
  nuevo->dato = dato;
  nuevo->next = NULL;       
  if(primero == NULL){
              aux = primero;
              primero = nuevo;
             } else {
                     aux = primero;
                     while(aux != NULL){
                       aux = aux->next;
                      }
                     aux = nuevo;
                    }
 
 }
 

void see_list(lista *primero){
      lista *auxiliar;
      int i;
     
      auxiliar = primero;
      while (auxiliar!=NULL) {
            printf( "%d\n",auxiliar->dato);
            auxiliar = auxiliar->next;
            i++;
      }
      if (i==0) printf( "\nLa lista está vacía!!\n" );
     
     
     }
main(){
 primero = NULL;
 add_nod(4);
 add_nod(3);
 add_nod(5);
 see_list(primero); 
}
Un saludo.


En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Problema al insertar en listas abiertas.
« Respuesta #1 en: 2 Diciembre 2010, 19:42 pm »

Hola

prueba así

Código
  1. void add_nod(int dato){
  2.  lista *nuevo,*aux;
  3.  nuevo = (lista *) malloc (sizeof(lista));
  4.  nuevo->dato = dato;
  5.  nuevo->next = NULL;      
  6.  if(primero == NULL){
  7.              primero = nuevo;
  8.             }
  9.  else {
  10.              aux = primero;
  11.              while(aux->next != NULL){
  12.                  aux = aux->next;
  13.                  }
  14.              aux->next = nuevo;
  15.              }
  16. }
  17.  

Además tienes otros errores
-main debe devolver un entero
-en la funcion see_list debes inicializar la variable "i" a cero

Saludos


« Última modificación: 2 Diciembre 2010, 19:47 pm por satu » En línea

Breakbeat como forma de vida
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Problema al insertar en listas abiertas.
« Respuesta #2 en: 2 Diciembre 2010, 21:05 pm »

Muchas gracias por la resuesta, funciona a la perfección, ¿Podrías explicármelo por favor?
No entiendo por que tu código no da fallo de segmentación, ya que en algún momento aux sera igual a NULL, y por lo tanto aux->next no existirá, lo cual sería fallo de segmentación pero aún asi el código me funciona.
Podrías echarme una mano para comprender lo que has hecho ^^
Un saludo, y gracias de nuevo.
En línea

Leber


Desconectado Desconectado

Mensajes: 338


"Fracta, non verba"


Ver Perfil WWW
Re: Problema al insertar en listas abiertas.
« Respuesta #3 en: 3 Diciembre 2010, 10:24 am »

Fijate en esto:

Código:
while(aux != NULL) {
                aux = aux->next;
        }

Estas comparando si el puntero aux es NULL, pero luego asignas aux->next a aux, que si que puede apuntar a NULL.

Ahora su codigo hace:

Código:
while(aux->next != NULL) {
                aux = aux->next;
         }

Antes de asignar aux->next a auxt, comprueba que aux->next no sea un puntero invalido.

Saludos
En línea

"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Problema al insertar en listas abiertas.
« Respuesta #4 en: 3 Diciembre 2010, 23:22 pm »

Muchísimas gracias por la respuesta, ahora ya me quedo todo claro Azn Seguiré viendo las listas, espero que no me surjan muchas dudas mas por que la verdad es que me traen loco los malditos punteros y listas.
Un saludo y gracias de nuevo ^^.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Listas
Java
HadesDark 2 2,588 Último mensaje 9 Noviembre 2007, 22:00 pm
por Ragnarok
Problema con las listas de reproduccion en el iPod Shuffle
Foro Libre
Razgriz 4 3,841 Último mensaje 11 Junio 2010, 13:14 pm
por Razgriz
Uso de Listas: Subprograma que lea 2 listas y forme una.
Dudas Generales
hbenitez 2 3,556 Último mensaje 8 Agosto 2010, 20:11 pm
por hbenitez
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 6,043 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Listas simples (Insertar Buscar)
Java
Dany Solis 1 5,191 Último mensaje 29 Noviembre 2018, 16:41 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines