Tema: test
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2008, 17:10
TonoFilth
 
Fecha de Ingreso: noviembre-2006
Mensajes: 5
Antigüedad: 18 años, 4 meses
Puntos: 0
test

Edit: Perdón por el título, pero había puesto test para poder visualizar el mensaje antes de enviarlo y luego se me ha olvidado cambiar el título T.T

Buenas.

En la asignatura Programación Orientada a Objetos de mi carrera me han pedido realizar una práctica sobre la gestión de una clínica. El caso es que para comprobar que nuestra práctica está bien debemos pasar un autocorrector que ellos nos mandan, por lo tanto el código que usa el autocorrector no puede ser modificado ya que su función es la de comprobar que nuestra práctica funciona correctamente realizando una serie de pruebas.

El problema viene a raíz de la clase Diagnostico
Código:
class Diagnostico{

	private:
		Tratamiento *tratamiento;
<más codigo aquí>
Esta es una función miembro de la clase:

Código:
void Diagnostico::tratar(Tratamiento *t){

	if(tratamiento != NULL)
		delete tratamiento;

	tratamiento = t;
}
y este es el código que uso en el destructor de la clase:

Código:
Diagnostico::~Diagnostico(){

	if(tratamiento != NULL){
		delete tratamiento;
		tratamiento = NULL;
	}
}
Vale, hasta aquí bien, el problema viene cuando el autocorrector ejecuta la siguiente secuencia:

Código:
Tratamiento *t0 = new Tratamiento("Tratamiento #0");
Diagnostico *d0 = new Diagnostico(tdAlta,"Diagnostico #0");

d0->tratar(t0);

delete t0; delete d0;

La salida del programa es: Fallo de segmentación como es lógico ya que el destructor intenta borrar una posición de memoria que ya no existe, pero el caso es que este código del autocorrector no puedo cambiarlo delete t0; delete d0; que es el que da problemas, y no sé qué hacer en el destructor para que cuando se destruya un objeto Diagnostico elimine al objeto tratamiento que tiene asociado, como se define en la parte privada.


Bueno, si alguien ha entenddo la parrafada anterior y puede ayudarme se lo agradecería. Saludos!!

Última edición por TonoFilth; 10/11/2008 a las 17:13 Razón: Olvido del título