SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: solarin en Viernes 25 de Agosto de 2006, 10:25

Título: Error Al Devolver Un String
Publicado por: solarin en Viernes 25 de Agosto de 2006, 10:25
Tengo el siguiente codigo:

(las variables estan definidas en el codigo, solo pongo la parte importante)
Código: Text
  1.  
  2. Class CMessage{
  3.  
  4. string CMessage::GenerateString()
  5. {
  6.  
  7.   string finalmessage;
  8.   stringstream s;
  9.   s << codeClass;
  10.     finalmessage = "CODE: "+s.str() + " - ";
  11.   //finalmessage = codeClass + "----";
  12.    finalmessage = finalmessage + messageClass + " - ";
  13.  
  14.   return finalmessage;
  15. }
  16.  
  17. }
  18.  
  19.  
Código: Text
  1.  
  2. //A.h
  3.  
  4. Class A {
  5.   public:
  6.      string StringToLogger(MessagesNotifier_Client* client, CMessage *msg)
  7.   private:
  8.      string msgToLogger;
  9. }
  10.  
  11.  
  12.  
Código: Text
  1.  
  2. // A.cpp
  3.  
  4.   string  A::StringToLogger(MessagesNotifier_Client* client,CMessage *msg)
  5.     {  
  6.   msgToLogger = msg->GenerateString(); // Error here.
  7.   invokerClass = typeid( client ).name();
  8.   msgToLogger = msgToLogger + invokerClass;
  9.   msgToLogger = msgToLogger + "----";
  10.   // Enviamos:  "Codigo_de_error" + ---- + "miss de error" + ---- + "Nombre de la classe"
  11.   return msgToLogger;
  12.  
  13.    }
  14.  
  15. }
  16.  
  17.  
  18.  

Dentro de la clase A, estoy llamando al metodo "GenerateString" de la clase CMessage. Este metodo tiene que devolver un string, y lo genera correctamente. El error aparece cuando el compilador assigna el valor devuelto por "GenerateString" a el string msgToLogger.

El error es el siguiente:


Access violation reading in 0xcdcdcdf1.
Access violation writting in 0xcdcdcdcd.


Alguna idea o sugerencia?

Gracias.
Título: Re: Error Al Devolver Un String
Publicado por: JuanK en Viernes 25 de Agosto de 2006, 14:33
Seria bueno que mostraras desde donde y como estas llamado a
A::StringToLogger
Título: Re: Error Al Devolver Un String
Publicado por: Eternal Idol en Viernes 25 de Agosto de 2006, 15:16
Cita de: "solarin"
Alguna idea o sugerencia?
msgToLogger = msg->GenerateString(); // Error here.

¿msg de donde salio? Comproba que no sea un puntero erroneo (no inicializado) ... para resolver estos problemas suele ser una gran ayuda la depuracion.

¿Seguro que GenerateString se llega a ejecutar? Pone un breakpoint para comprobarlo o usa la tecnica del pobre: printf/OutputDebugString.
Título: Re: Error Al Devolver Un String
Publicado por: Enko en Viernes 25 de Agosto de 2006, 16:38
Citar
printf/OutputDebugString.
Che!!! nada pobre   :(
Vivo haciendo eso :P , lo que pasa es que me cuesta mucho usar el debugger. Aunque el de VC# es bastente facil pero aún así prefiero MessageBox.
Título: Re: Error Al Devolver Un String
Publicado por: Eternal Idol en Viernes 25 de Agosto de 2006, 16:43
Cita de: "Enko"
Che!!! nada pobre   :(
Vivo haciendo eso :P , lo que pasa es que me cuesta mucho usar el debugger. Aunque el de VC# es bastente facil pero aún así prefiero MessageBox.
Es pauperrima en realidad, si en algun momento te pones con un depurador y le tomas la mano te vas a dar cuenta de la diferencia abismal que exiset  :devil:
Título: Re: Error Al Devolver Un String
Publicado por: JuanK en Viernes 25 de Agosto de 2006, 16:44
Totalmente de acuerdo.
Título: Re: Error Al Devolver Un String
Publicado por: solarin en Lunes 28 de Agosto de 2006, 08:12
Citar
¿msg de donde salio? Comproba que no sea un puntero erroneo (no inicializado) ... para resolver estos problemas suele ser una gran ayuda la depuracion.


msg->GenerateString() se genera bien. El problema es cuando tengo que asignar el string resultado a msgToLogger. msgToLogger es un string que tengo definido en el .h, pero cuando depuro , puedo ver que msgToLogger no se puede resolver y cuando asigno el resultado de msg->GenerateString() a msgToLogger da el error.

Para solucionarlo momentaneamente he vuelto a definir el string de la manera siguiente:

Código: Text
  1.  
  2. string msgToLogger = msg->GenerateString();
  3.  

Pero no tengo ni idea de porque tengo que volver a definir el string.
Título: Re: Error Al Devolver Un String
Publicado por: solarin en Lunes 28 de Agosto de 2006, 08:29
Cita de: "JuanK"
Seria bueno que mostraras desde donde y como estas llamado a
A::StringToLogger
En la misma clase A, tengo el siguiente metodo

Código: Text
  1.  
  2. void A::NotifyWarningMessage(MessagesNotifier_Client* client, CMessage *msg)
  3. {
  4.   string msgToLogger = GenerarString(client,msg);
  5.   Logger_Impl *logger = new Logger_Impl();
  6.         logger = static_cast<Logger_Impl*>(logger->GetInstance());
  7.   msgToLogger = GenerarStringParaLogger(client,msg);
  8.   logger->NotifyWarningMessage(msgToLogger);
  9. }
  10.  
  11.  

Para mas informacion , pongo el codigo desde donde llamo a la funcion A::NotifyWarningMessage



//MessagesNotifier_Client.cpp

Código: Text
  1.  
  2. #include "Sb_Ncb/GE/MessagesNotifier_Client.h"
  3.  
  4. MessagesNotifier_Client::MessagesNotifier_Client()
  5. {
  6.   theMessagesNotifier_Component = new A;
  7.   theMessagesNotifier_Component=static_cast<A*>(theMessagesNotifier_Component->GetInstance());
  8. }
  9.  
  10. void MessagesNotifier_Client::NotifyWarningMessage(MessagesNotifier_Client* theNotifier ,CMessage* msg)
  11. {
  12.  
  13.         theMessagesNotifier_Component=static_cast<MessagesNotifierLogger*>(theMessagesNotifier_Component->GetInstance());
  14.   theMessagesNotifier_Component->NotifyWarningMessage(theNotifier,msg);
  15.  
  16. }
  17.  
  18.  
  19.  
  20.  

//MessagesNotifier_Client.h

Código: Text
  1.  
  2.  
  3. using namespace std;
  4.  
  5.  
  6. class MessagesNotifier_Component;
  7.  
  8.  
  9. class MessagesNotifier_Client
  10. {
  11. public:
  12.  
  13.   MessagesNotifier_Client();
  14.  
  15.  
  16.      
  17.  
  18.  
  19.     void NotifyWarningMessage(MessagesNotifier_Client* theNotifier ,CMessage* msg);
  20.  
  21.  
  22. private:
  23.  
  24.     MessagesNotifierLogger* theMessagesNotifier_Component;
  25.  
  26. };
  27.  
  28.  
  29.  
  30.  
  31.  
Título: Re: Error Al Devolver Un String
Publicado por: solarin en Lunes 28 de Agosto de 2006, 09:12
Gracias a todos por la ayuda. Al final , como siempre, fue error tonto total. Estoy usando el patron singleton, pero no tenia inicializada la instancia, con lo que me hacia cosillas raras como esta. Gracias otra vez por las molestias.