Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Pogacha en 17 de Septiembre de 2005, 03:33:51 PM

Título: Problema Con Exepciones En C++
Publicado por: Pogacha en 17 de Septiembre de 2005, 03:33:51 PM
 Que tul ...

Estaba decorando mi motor 2d y pase todo el manejo de errores a exception handling, hice dos o tres pruebas y como vi que andaba lo supuse correcto, pero pasado los dias al saltar una exepción me tiro un error, el problema es que se perdió el contenido del objeto de la exepción. No lo pude resolver en el momento, y tampoco encontré info que me dijera el por que ...
Tengo entonces:

class TError {
 char *t;
public:
 TError(const char *f, ...)
 {
    static char temp[1024];
    // formateo  con va_star y va_list y ese rollo
    // para que en   temp me quede la cadena formateado
    t=new char[strlen(temp)+1];
    strcpy(t, temp);
 // si debugueo aqui tengo en t lo que tengo que tener!!!
 }
 ~TError() { if(t) delete t;}
 const char *Tomar_Texto(void) { return t; }
};

try  {  
 throw TError("%d",10);
} catch(TError &e)  {
// pero al cortar la ejecución aquí veo que e.t apunta a la misma dirección de memoria, pero
// el contenido es basura ...
 Sistem->ShowSistemMessage(e.Tomar_Texto());
}


No se que estoy haciendo mal ...
Si alguien me ayuda.

Saludos.
Título: Problema Con Exepciones En C++
Publicado por: Pogacha en 17 de Septiembre de 2005, 03:50:52 PM
 Agrego: ¿esta bien tomar el error por referencia? o sea capturarlo con TError &e? o deberia tirar el error con new y agarrarlo con TError *e?
Saludos.
EDIT: Replace "Sistem" for "System", en realidad a todo el motor lo pase a castellano hace poco también.
Título: Problema Con Exepciones En C++
Publicado por: Ray en 18 de Septiembre de 2005, 04:32:12 PM
 Creo que el destructor es llamado antes de ver el mensaje, por eso pierdes los datos, quizás t debería ser estático.

Un saludo.
Título: Problema Con Exepciones En C++
Publicado por: Pogacha en 19 de Septiembre de 2005, 01:52:39 PM
 Si, ese es el problema, me destruye el objeto.
Estuve leyendo y llegué a que cuando se lanza una excepción por objeto este se copia con la función copia (la cual no se cual es) y luego el original se destruye. La solución: lo paso por new.
De todos modos me queda la duda.
Saludos