string in STL-Containern unterbringen



  • Hallo,
    Ich möchte für mein aktuelles Projekt ein paar Strings int einen STL-Container wie zum Beispiel list .
    Aber folgender Code erzeugt immer "Speicherzugriffsfehler"

    #include <string>
    #include <list>
    
    using namespace std;
    
    int main()
    {
        list<string> liste;
        list.push_back("test");  //Hier tritt der Fehler auf (durch einen Debugger bewiesen)
        return 0;
    }
    

    Aber wenn ich vor list.push_back("test"); ein list.resize(20) schreibe, taucht der Fehler nicht auf...
    Aber das ist natürlich keine gute Lösung...
    Wie würdet ihr das Problem lösen?

    mfg D3lta



  • Bestimmt nicht. Du hast den Code hier auch nur abgetippt und dabei offenbar Fehler reingemacht, denn deine std::list heißt "liste" und nicht "list".
    Zeig deinen originalen Code.



  • Eigentlich dürfte das gar nicht kompilieren.



  • 314159265358979 schrieb:

    Bestimmt nicht. Du hast den Code hier auch nur abgetippt und dabei offenbar Fehler reingemacht, denn deine std::list heißt "liste" und nicht "list".
    Zeig deinen originalen Code.

    Ich glaub das ist der originale.



  • Hacker schrieb:

    314159265358979 schrieb:

    Bestimmt nicht. Du hast den Code hier auch nur abgetippt und dabei offenbar Fehler reingemacht, denn deine std::list heißt "liste" und nicht "list".
    Zeig deinen originalen Code.

    Ich glaub das ist der originale.

    Du glaubst falsch. Halt die Klappe verdammt.



  • D3lta schrieb:

    Wie würdet ihr das Problem lösen?

    Welches Problem denn eigentlich? Einen Speicherzugriffsfehler kann es gar nicht geben, da das Programm sich nicht kompilieren lässt. Oder ist bei Dir der Compiler abgeschmiert?



  • Du glaubst falsch. Halt die Klappe verdammt.

    😮 Was ist bei dir los ?



  • 7xCore schrieb:

    Du glaubst falsch. Halt die Klappe verdammt.

    😮 Was ist bei dir los ?

    Ich hab ihn nicht lieb, weil er andauernd Unsinn postet.



  • Ich hab ihn nicht lieb, weil er andauernd Unsinn postet.

    😃



  • 314159265358979 schrieb:

    Bestimmt nicht. Du hast den Code hier auch nur abgetippt und dabei offenbar Fehler reingemacht, denn deine std::list heißt "liste" und nicht "list".
    Zeig deinen originalen Code.

    Dieser Code und der originale sind 100% Eigenarbeit, ohne STRG+C oder STRG+V !
    Dürfte ich bitte ein paar Gründe für diese Anschuldigungen zu hören bekommen?
    liste heißt liste , weil list der Typ des verwendeten STL-Containers ist...

    Tachyon schrieb:

    Eigentlich dürfte das gar nicht kompilieren.

    Dieses Beispiel läuft einwandfrei, ohne Einwände oder Compilerfehler, dürfte ich trotzdem die gründe für diesen Verdacht zu erfahren bekommen?

    314159265358979 schrieb:

    7xCore schrieb:

    Du glaubst falsch. Halt die Klappe verdammt.

    😮 Was ist bei dir los ?

    Ich hab ihn nicht lieb, weil er andauernd Unsinn postet.

    Welcher Unsinn?
    Außerdem bin halt noch ein ziemlicher Anfänger 🙂

    mfg D3lta

    P.S.: Ich poste den Code gleich 🙂



  • list.push_back("test");
    

    Diese Zeile ist falsch. Deine liste heißt "liste" und nicht "list".



  • 314159265358979 schrieb:
    7xCore schrieb:
    Zitat:
    Du glaubst falsch. Halt die Klappe verdammt.

    😮 Was ist bei dir los ?

    Ich hab ihn nicht lieb, weil er andauernd Unsinn postet.

    Welcher Unsinn?

    Mit dem kommentar von PI ist Hacker gemeint



  • Diese Zeile ist falsch. Deine liste heißt "liste" und nicht "list".

    Was ?
    Erläutere bitte nochmal , iwi versteh ich das nicht was du da sagst



  • list<string> LISTE;
    LISTE.push_back("hugo");
    

    vs.

    list<string> LISTE;
    list.push_bacl("hugo");
    


  • 314159265358979 schrieb:

    list<string> LISTE;
    LISTE.push_back("hugo");
    

    vs.

    list<string> LISTE;
    list.push_bacl("hugo");
    

    Achsoooo 😃



  • Hab ich nur geschrieben, weil ich mir nicht vorstellen konnte, das jemand dreimal hintereinander den selben Schreibfehler macht... 😞 😕



  • D3lta schrieb:

    ...

    Tachyon schrieb:

    Eigentlich dürfte das gar nicht kompilieren.

    Dieses Beispiel läuft einwandfrei, ohne Einwände oder Compilerfehler, dürfte ich trotzdem die gründe für diesen Verdacht zu erfahren bekommen?

    ...

    Interressiert mich immer noch 😉

    314159265358979 schrieb:

    list.push_back("test");
    

    Diese Zeile ist falsch. Deine liste heißt "liste" und nicht "list".

    Schreibfehler 🙄

    hier ist der sehr stark verkürzte Quellcode - und nein er ist von mir 😃

    #include "main.headers.h"
    
    class UI
    {
    private:
    	//Zeigt an, ob das UI zu einem Server gehört
    	bool server;
    	//Sockets
    	Socket_Server sserver;
    	Socket_Server sclient;
    	Socket_Client cserver;
    	//buffer
    	string msg, buffer, prot;
    	char ch;
    	//Speicher für die empfangenen Nachrichten
    	deque<string> chatlog;
    	deque<string>::iterator chatlog_it;
    	//Variablen
    	int maxx, maxy, x, y;
    	//Logger
    	Logger log;
    	//Server-spezifisches
    	list<struct ClientData> clients;
    	list<struct ClientData>::iterator clients_it;
    public:
    	UI(int argc, char* argv[], bool Server);
    	virtual ~UI();
    	void UpdateData();
    	bool input();
    	void print();
    
    	const string& get_msg() const {return msg;}
    	const list<struct ClientData>& get_ClientData() const {return clients;}
    	Logger& get_logger() {return log;}
    };
    
    //////////////////////////////////////////////////////////////////////////////
    
    UI::UI(int argc, char* argv[], bool server) :log("log"), msg(""), buffer(""), sserver(log), sclient(log), cserver(log), server(server)
    {
    
    	chatlog.clear();
    	initscr();
    	if(!has_colors())
    	{
    		endwin();
    		cerr << "Das Terminal unterstützt keine Farben, versuchen sie es mit dem Konsolenmodus";
    		throw Exception("Das Terminal unterstützt keine Farben", &log);
    	}
    	start_color();
    	//...
    }
    
    UI::~UI()
    {
    	endwin();
    }
    
    void UI::UpdateData()
    {
            //hier habe ich msg=""; ergänzt
    	if(server)
                    RefreshDataServer(msg, sserver, clients);
            else
                    RefreshDataClient(msg, cserver);
            chatlog.push_back(msg); 
            //so sollte es heißen ;) if(msg != "") chatlog.push_back(msg);
    }
    
    bool UI::input()
    {//gibt solange, wie der User die Sitzung nicht beendet true zurück
    	//...
    }
    
    void UI::print()
    {
    	clear();
    	getmaxyx(stdscr, maxy, maxx);
    	x=0; y=0;
    	if(chatlog.size() != 0)
    	{
    		if(chatlog.size() >= 2)
    			chatlog_it = chatlog.end() - (maxy-3);
    		else
    			chatlog_it = chatlog.begin();
    		for(;	chatlog_it != chatlog.end() && y <= maxy-3; 
    			++chatlog_it)
    			mvprintw(y++, x, "%s", chatlog_it->c_str()); //laut gdb ist der Fehler hier
    		if(chatlog_it == chatlog.end())
    			y = maxy-2;
    	}
    	else
    		y=maxy-2;
    	mvhline(y++, x, '-', maxy);
    	mvprintw(y, x+2, "%s", buffer.c_str());
    	refresh();
    }
    

    mfg D3lta

    EDIT: Fehler gefunden 💡 🙄
    Er lag in der Funktion UI::UpdateData() , ich habe den betreffenden Abschnitt in den Code eingefügt und markiert...
    Diese Fehler, die mich immer in die Verzweifelung treiben, sind der absolute Müll 😉
    Man sollte dieses Thema löschen... 😞



  • D3lta schrieb:

    D3lta schrieb:

    ...

    Tachyon schrieb:

    Eigentlich dürfte das gar nicht kompilieren.

    Dieses Beispiel läuft einwandfrei, ohne Einwände oder Compilerfehler, dürfte ich trotzdem die gründe für diesen Verdacht zu erfahren bekommen?

    ...

    Der Grund wurde zwar schon mehrfach angesprochen aber trotzdem:

    #include <string>
    #include <list>
    
    using namespace std;
    
    int main()
    {
        list<string> liste;
        list.push_back("test");  //Das Objekt heisst liste und nicht list. List ist ein Klassentemplate und bietet kein push_back an...
        return 0;
    }
    

    Und der Code den Du hier zuletzt gepostet hast und die kommentierte Fehlerstelle hat genau was mit dem Code in Deinem Eingangsposting zu tun?


Anmelden zum Antworten