Nicht initialisierte STL-Container oder was?



  • Nein, aber es wäre wesentlich hilfreicher wenn du uns mal den Code dieser Klasse zumindest ausschnittweise zeigst...mit dem Raten haben wirs nicht so 😉

    MfG SideWinder



  • Gut.
    Console.h:
    ConsCommand_t und ConsLine_t sind Strukturen, die in den Containern 'Cmds' und 'Conslines' gespeichert werden.

    class ConsCommand_t
    {
    public:
        std::string Name;//in Parse sucht die Funktion diese Zeichenkette
        ConsFunc Cmd;    //Steht für eine 'void ABC123(void)'
    };
    
    class ConsLine_t //Struktur für die einzelnen Zeilen der Konsole
    {
    public:
        uint Millis; 
        int ColID;    //Die Farbe
        std::string Text;
    };
    
    class Console_t
    {
    //...
    //Ganz viel Funktionen
    
    //Funktionen zum Hinzufügen 
    void AddCmd(const std::string name,ConsFunc Func);
    void AddText(const std::string Text, const int ColID);
    
    std::vector<ConsCommand_t> Cmds;
    std::vector<std::string> Arguments;
    std::list<ConsLine_t> ConsLines;
    }
    public:
    

    Immer wenn in AddText oder AddCmd die Funktionen
    Cmds.push_back(<Parameter>);
    oder
    ConsLines.push_back(<Parameter>)

    oder sonstige Funktionen dieser Container aufgerufen werden, stürzt es ab.



  • Hrmpf! schrieb:

    ...
    Cmds.push_back(<Parameter>);
    oder
    ConsLines.push_back(<Parameter>)

    oder sonstige Funktionen dieser Container aufgerufen werden, stürzt es ab.

    Aha.

    So spontan sehe ich nichts Falsches ... noch 2 Rückfragen:
    - "stürzt ab" bedeutet: Zu Laufzeit gibt's einen segmentation fault ?
    - Wie füllst Du "<Parameter>" ?

    Gruß,

    Simon2.



  • Es kommt der Fehler in einer Nachrichtenbox:
    "OpenGL hat in Opengl.exe einen Fehler verursacht. Opengl wird geschlossen."

    Naja, und die Parameter sind nicht der Fehler, denn selbst wenn ich parameterlose Memberfunktionen der Container wie 'clear()' aufrufe stürzt es ab.



  • Signal 11 / segmentation fault unter Win32:

    Fehlermeldung->Technische Details anzeigen-> Fehlernummer 0xc005 bestätigen

    Dürfte allerdings klar sein.



  • Da steht nur:

    OPENGL verursachte einen Fehler durch eine ungültige Seite
    in Modul OPENGL.EXE bei 019f:0043df73.

    Vielleicht weil ich WinME hab?



  • Hrmpf! schrieb:

    Es kommt der Fehler in einer Nachrichtenbox:
    "OpenGL hat in Opengl.exe einen Fehler verursacht. Opengl wird geschlossen."

    Naja, und die Parameter sind nicht der Fehler, denn selbst wenn ich parameterlose Memberfunktionen der Container wie 'clear()' aufrufe stürzt es ab.

    Hi,

    also das klingt mir nicht nach einem "Problem mit C++", sondern eher mit OpenGL bzw. dessen Konfiguration bei Dir auf dem System.
    STL-Container muss man jedenfalls nicht gesondert "initialisieren" (oder etwas Anderes machen, damit sie keinen segFault auslösen) ... dafür gibt's ja Konstruktoren.

    Ich vermute, Dir kann im [url=http://www.c-plusplus.net/forum/viewforum-var-f-is-7.html]Spieleprogrammierung-Unterforum[/url) besser weitergeholfen werden.

    Gruß,

    Simon2.



  • Also erst mal Danke für die Hilfe, allerdings ist es auf keinen Fall ein OpenGL-Problem, da ja richtig gerendert wird, nur bei Zugriffen auf die genannten Container krachts.



  • Hrmpf! schrieb:

    Also erst mal Danke für die Hilfe, allerdings ist es auf keinen Fall ein OpenGL-Problem, da ja richtig gerendert wird, nur bei Zugriffen auf die genannten Container krachts.

    Hi,

    ich meine auch nicht unbedingt, dass alles in OpenGL kaputt sein müsste, sondern nur, dass irgendetwas im Zusammenhang mit Deiner Schnittstelle kaputt ist ... oder irgendwo steht, dass man damit keine STL-Container verwenden kann. 😉
    ... oder da ist tatsächlich was auf/mit Deinem Rechner/OS nicht in Ordnung.

    Gruß,

    Simon2.



  • Denke da ist alles in Ordnung 😉
    Deutet für mich eher auf einen Zugriffsfehler hin.
    Irgendwie enthält dein Container entweder im Programmkontext ungültige Objekte (Hat die Klasse einen Copyconstructor?),
    oder es ist z.b. ein Indexfehler irgendwo vorhanden, so das vector sich aufhängt.

    Was sagt denn der Debugger?



  • Hi,

    Hrmpf! schrieb:

    ...selbst wenn ich parameterlose Memberfunktionen der Container wie 'clear()' aufrufe stürzt es ab.

    also ich bin davon ausgegangen, dass er auf einen leeren vector ein clear() ausgeführt hat (immerhin hat er ja schon festgestellt, dass push_back() "kracht").... und wenn das kracht, ist da was kern-verka**t.

    Falls das NICHT der Fall ist, stimme ich natürlich zu: Da wird dann ein Fehler mit der Erzeugung, Vernichtung und dem Kopieren der Objekte oder eine Bereichsüberschreitung wahrscheinlicher sein.
    Dann: Ctoren (Default, Copy), Dtor, operator=() überprüfen (wird da irgendwo Speicher alloziert/gelöscht, Handles geholt/freigegeben, .... evtl. doppelt beim Kopieren ?) ... und den Zugriff auf die Containerelemente checken (Index ?).

    Gruß,

    Simon2.


Anmelden zum Antworten