Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Exepciones En C++

Iniciado por Pogacha, 17 de Septiembre de 2005, 03:33:51 PM

« anterior - próximo »

Pogacha

 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.

Pogacha

 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.

Ray

 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.

Pogacha

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.