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!!