• Jueves 14 de Noviembre de 2024, 04:33

Autor Tema:  Error Al Devolver Un String  (Leído 1882 veces)

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Error Al Devolver Un String
« en: Viernes 25 de Agosto de 2006, 10:25 »
0
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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error Al Devolver Un String
« Respuesta #1 en: Viernes 25 de Agosto de 2006, 14:33 »
0
Seria bueno que mostraras desde donde y como estas llamado a
A::StringToLogger
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #2 en: Viernes 25 de Agosto de 2006, 15:16 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #3 en: Viernes 25 de Agosto de 2006, 16:38 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #4 en: Viernes 25 de Agosto de 2006, 16:43 »
0
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:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Error Al Devolver Un String
« Respuesta #5 en: Viernes 25 de Agosto de 2006, 16:44 »
0
Totalmente de acuerdo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #6 en: Lunes 28 de Agosto de 2006, 08:12 »
0
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.

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #7 en: Lunes 28 de Agosto de 2006, 08:29 »
0
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.  

solarin

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Error Al Devolver Un String
« Respuesta #8 en: Lunes 28 de Agosto de 2006, 09:12 »
0
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.