Programación General > C/C++

 Problemas con retorno de punteros a struct

(1/1)

dunkelheit:
BUenas tengo mi estructura


--- Código: C++ --- struct punto{    float x;    float y;    float z;    int tipo;     punto *sig;};  

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


--- Código: C++ --- punto* Compuesto::mostrarALTOQ(){    if(PuntoI!=NULL){        punto *p = PuntoI;        while(p!=NULL){            printf("n(%f,%f,%f)n",p->x,p->y,p->z);                  p = p->sig;        }    }    return PuntoI;}  
luego en otro cpp

llamo la clase y creo otro struct p


--- Código: C++ ---Compuesto c =   Compuesto();punto *p = (c.mostrarALTOQ());printf("punto p es : %f",p->x); 
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:
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++ --- Compuesto c;const punto* p = c.mostrarALTOQ();if (p){    printf("punto p es : %f", p->x);}else{    printf("punto p indefinido");}  
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++ --- const punto* Compuesto::mostrarALTOQ() const{    punto *p = PuntoI;    while (p)    {        printf("n(%f,%f,%f)n", p->x, p->y, p->z);        p = p->sig;    }    return PuntoI;}  

morfus_bedxhed:

--- Cita de: dunkelheit ---BUenas tengo mi estructura


--- Código: C++ --- struct punto{    float x;    float y;    float z;    int tipo;     punto *sig;};  
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++ --- struct punto{    float x;    float y;    float z;    int tipo;    struct punto *sig;};    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.
--- Fin de la cita ---

Navegación

[0] Índice de Mensajes

Ir a la versión completa