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
Ir a la versión completa