Char übergeben



  • Hi Leute,

    ich verzweifle gerade an einer trivialen Aufgabe. Und zwar habe ich ein Logsystem in dem ich Nachrichten an eine grafischen Ausgabe schreibe. Dieses Logsystem nimmt Nachrichten entgegen, speichert diese in einer List und gibt diese Nachrichten irgendwann später aus.
    Meine Methode zum entgegen nehmen der Nachricht sieht so aus:

    void CErrorHandler::AddInfoMessage(char* message)
    	{
    		if(IsElementAlreadyInInfoList(message)) return;
    		mInfoList.push_back(message);
    	};
    

    Jetzt übergebe ich in einer anderen Methode eine Meldung.

    char buffer [200];
    		sprintf(buffer, "wtf");
    		pErrorHandler->AddInfoMessage(buffer);
    

    Leider gibt mein Nachrichtensystem nur Müll aus.
    Wenn ich eine Nachricht so übergeben funktioniert es:

    pErrorHandler->AddInfoMessage("help");
    

    Meine Vermutung ist, dass es sich um ein Pointerproblem handelt, also der String den ich übergebe und in meine Liste schreibe, zum Zeitpunkt wenn ich meine Liste ausgeben möchte nicht mehr existiert.
    Wie kann ich dieses Problem umgehen?

    Cheers Pascal



  • 1. Google mal const-correctness. Der Code mit den "" sollte nicht mal kompilieren.
    2. Was ist mInfoList? Ein vector<char*>? Das kann doch nicht funktionieren, sollte dir doch bewusst sein. Was glaubst du wozu strcpy da ist? sprintf nutzt du doch schon? 😕
    3. Nimm einfach für alles std::string.



  • Danke erst mal für die Antwort.
    Es ist wie du vermutet hast eine Container Klasse mit typ <char*>
    Sprintf habe ich schon versucht, bringt leider nichts.

    void CErrorHandler::AddInfoMessage(char* message)
    	{
    		char buffer [100];
    		sprintf(buffer, "bla %s",message);
    		if(IsElementAlreadyInInfoList(buffer)) return;
    		mInfoList.push_back(buffer);
    	};
    

    Selbiges gilt für:

    void CErrorHandler::AddInfoMessage(char* message)
    	{
    		char buffer [100];
    		strcpy( buffer,message);
    		if(IsElementAlreadyInInfoList(buffer)) return;
    		mInfoList.push_back(buffer);
    	};
    

    Es vermutlich einfach irgendwo ein Denkfehler von mir, aber ich steh da einfach grad aufm Schlauch?!?



  • 1. Siehe 1. oben!!
    2. Nein, du hast das nicht verstanden. Auf welchen Speicherbereich zeigt denn dein char*? Na? Genau, auf den der ungültig wird sobald du die Methode verlässt.
    3. Siehe 3. oben!!



  • cooky451 schrieb:

    1. Google mal const-correctness. Der Code mit den "" sollte nicht mal kompilieren.

    Meinst du die Zeile pErrorHandler->AddInfoMessage("help"); ? Falls ja, das wurde erst mit C++11 eingeführt, dass es nicht mehr kompiliert.


Anmelden zum Antworten