Ver Mensaje Individual
  #8 (permalink)  
Antiguo 23/03/2016, 01:25
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: imprimir lista en c++

Código C++:
Ver original
  1. elemento *q;//aquí obviamente declaro el puntero que sea tipo elemento

Vale, obviamente declaras un puntero pero... ¿a dónde apunta dicho puntero? Tiene sentido que un puntero apunte a alguna parte ¿no? si no, no se llamaría puntero y tendría un nombre más apropiado a su nueva utilidad.

Vamos a hacer como en la otra respuesta y vamos a bajar al nivel de las variables locales:

Código C++:
Ver original
  1. int q; // Cuánto vale q???

Porque es obvio que si reservo memoria en la pila para q esa memoria va a tener una secuencia binaria aunque yo no le haya dicho nada. De hecho podemos comprobarlo con el siguiente código:

Código C:
Ver original
  1. int a,b,c;
  2. printf("%d %d %d",a,b,c);

Esto es lo que se conoce como variables no inicializadas y su contenido es lo que se conoce como basura (no conoces el origen de esos datos ni tampoco qué quieren decir luego no son de interés para tus propósitos). Las variables no inicializadas causan muchos problemas en los programas puesto que pierdes el control sobre lo que hace tu programa.

Lo vemos con un ejemplo rápido. ¿Qué hace este código? ¿Cuántos números saca por pantalla?

Código C:
Ver original
  1. int i;
  2. for( ;i<10;i++) printf("%d");

Si tu respuesta rápida es 10 números vuelve a revisarlo. Fíjate que a i no le hemos asignado un valor inicial luego lo mismo puede valer 0 (si empieza con 0 juega al euromillón) como cualquier otro valor almacenable en 31 bits más signo.

Seguimos con tu código. Permíteme que borre tus comentarios ya que ha quedado claro que las cosas no son tan obvias como parecen.

Código C++:
Ver original
  1. elemento *q;
  2.        
  3. if(q->sig!=NULL){

Problema que tenemos aquí. Si q no está inicializado damos por sentado que apunta a una región desconocida de la memoria luego lo que nos podemos encontrar ahí lo mismo es memoria utilizada por otro programa. ¿Qué pretendes con el if que has puesto justo después? ¿Comprobar si has tenido suerte y esa zona de memoria aleatoria tiene el valor que esperas? Es como pretender que te toque la lotería simplemente pasando frente a la puerta de la administración de loterías.

Para que tu programa funcione tienes que asignar valores a todas tus variables, punteros incluídos.

PD.: decir que un puntero está vacío es una forma de expresar que el puntero apunta a 0. Decir que un puntero no es válido indica que el puntero no apunta a un elemento de tu programa.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.