• Domingo 28 de Abril de 2024, 20:25

Autor Tema:  Problemas con retorno de punteros a struct  (Leído 1307 veces)

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Problemas con retorno de punteros a struct
« en: Miércoles 17 de Noviembre de 2010, 16:55 »
0
BUenas tengo mi estructura

Código: C++
  1.  
  2. struct punto{
  3.     float x;
  4.     float y;
  5.     float z;
  6.     int tipo;
  7.     punto *sig;
  8. };
  9.  
  10.  


los datos los relleno en una clase y los muestro en este metodo

Código: C++
  1.  
  2. punto* Compuesto::mostrarALTOQ(){
  3.     if(PuntoI!=NULL){
  4.         punto *p = PuntoI;
  5.         while(p!=NULL){
  6.             printf("n(%f,%f,%f)n",p->x,p->y,p->z);      
  7.             p = p->sig;
  8.         }
  9.     }
  10.     return PuntoI;
  11. }
  12.  
  13.  

luego en otro cpp

llamo la clase y creo otro struct p

Código: C++
  1. Compuesto c =   Compuesto();
  2. punto *p = (c.mostrarALTOQ());
  3. printf("punto p es : %f",p->x);
  4.  

me muestra los puntos del metodo llamado pero cuando quiero ver directamente el punto x de p me sale una interrupcion (visual c++ 2008), espero que me puedan ayudar nose muy bien de apuntadores y facil q he hecho algo mal . gracias

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Problemas con retorno de punteros a struct
« Respuesta #1 en: Miércoles 17 de Noviembre de 2010, 22:17 »
0
Siempre tienes que asegurarte que tu puntero apunte a un objeto antes de dereferenciar: Verifica que no es nulo y cuando destruyas el objecto haz que el puntero sea nulo.
Por cierto basta con escribir "Compuesto c;" para declarar y construir el objeto.
Código: C++
  1.  
  2. Compuesto c;
  3. const punto* p = c.mostrarALTOQ();
  4. if (p)
  5. {
  6.     printf("punto p es : %f", p->x);
  7. }
  8. else
  9. {
  10.     printf("punto p indefinido");
  11. }
  12.  
  13.  

Esos NULL no son necesarios, además como el método no cambia nada debería ser constante (const después del nombre del método) y es mejor que retorne un puntero a un punto constante para no modificar por accidente lo apuntado por PuntoI (const al inicio):

Código: C++
  1.  
  2. const punto* Compuesto::mostrarALTOQ() const
  3. {
  4.     punto *p = PuntoI;
  5.     while (p)
  6.     {
  7.         printf("n(%f,%f,%f)n", p->x, p->y, p->z);
  8.         p = p->sig;
  9.     }
  10.     return PuntoI;
  11. }
  12.  
  13.  

morfus_bedxhed

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Problemas con retorno de punteros a struct
« Respuesta #2 en: Domingo 28 de Noviembre de 2010, 20:04 »
0
Cita de: dunkelheit
BUenas tengo mi estructura

Código: C++
  1.  
  2. struct punto{
  3.     float x;
  4.     float y;
  5.     float z;
  6.     int tipo;
  7.     punto *sig;
  8. };
  9.  
  10.  

si estás definiendo un apuntador al mismo tipo de estructura(punto) también debes indicar que el apuntador debe ser a la estructura misma con la palabra clave struct, osea:

Código: C++
  1.  
  2. struct punto{
  3.     float x;
  4.     float y;
  5.     float z;
  6.     int tipo;
  7.    struct punto *sig;
  8. };
  9.  
  10.  
 y acuerdate que debes inicializar el apuntador para que apunte a algo, en este se caso sería a una instancia del tipo de estructura.