Programm stürtz bei beenden ab. Nicht immer.



  • Der wichtigste Schritt wäre wohl, std::string aus <string> statt char* zu verwenden. Da kann man sich schon wesentlich schwerer ins Bein schießen.
    Außerdem wäre besser:

    struct Name
    {
    };
    

    Die typedef braucht man in C++ nicht 🙂

    Und wenn dwLines nur die Anzahl der Elemente von mString ist, warum verwendest du dann nicht mString.size()? Und für das letzte Element in mString dann mString.back()... Und leeren kann man einen STL-Container am bequemsten mit .clear().



  • Danke für die Tips.

    Aber wie konvertiere ich eine std::string in char*?

    bei (char*)text gibt es eine Fehlermeldung.



  • string hat ne Funktin dafür:

    std::string st("jdfkajf");

    char* text = st.c_str();



  • c_str() gibt aber nur einen "const char*" zurück, d.h. du kannst den String über c_str() nicht beschreiben. Wenn eine Funktion den String nur auslesen will, aber trotzdem einen "char*" erwartet (kommt bei schlechten Schnittstellen vor), kannst du den String mit const_cast übergeben:

    c_funktion_mit_fehlendem_const(const_cast<char*>(str.c_str()));
    


  • operator void schrieb:

    Die typedef braucht man in C++ nicht 🙂

    Warum hat man es in C verwendet? Sehe es recht oft bei Codes, wozu ist das gut (gewesen)? 😮
    Stroustrup lehrt ja:

    struct A {};
    

    ist 'ne Abkürzung für

    class A { public: };
    

    und so verstehe ich es auch aus C++ :p



  • Strogij schrieb:

    Warum hat man es in C verwendet? Sehe es recht oft bei Codes, wozu ist das gut (gewesen)? 😮

    In C++ bedeutet eine Strukturdefinition auch eine implizite Typdefinition, das war in C noch nicht der Fall.
    Dennoch ist IMO das

    typedef struct MY_TEXT
    {
    /* ... */
    } MY_TEXT;
    

    nicht so richtig sinnvoll, sowas

    typedef struct
    {
    /* ... */
    } MY_TEXT;
    

    sieht für meine (C-ungewohnten) Augen besser aus.

    Stroustrup lehrt ja:

    struct A {};
    

    ist 'ne Abkürzung für

    class A { public: };
    

    und so verstehe ich es auch aus C++ :p

    Hm, was willst Du damit sagen? In C gab es noch keine Klassen...



  • nman schrieb:

    Hm, was willst Du damit sagen? In C gab es noch keine Klassen...

    Ich weiß, deswegen meine ich auch Stroustrup. 🙄 Aber ist jetzt klar, typedef auf Strukturen sollte man bei C++ nicht benutzen. 🙂



  • Strogij schrieb:

    Aber ist jetzt klar, typedef auf Strukturen sollte man bei C++ nicht benutzen. 🙂

    "Sollte man nicht beuntzen" ist vielleicht nicht ganz klar, "ist künstliche Arbeitsbeschaffung und erschwert die Lesbarkeit" trifft das ganze wahrscheinlich besser, C++ übernimmt schließlich den typedef für Dich.



  • So wie ich es verstanden habe (nie mit C gearbeitet):
    Wenn man in C eine struct definiert (dasselbe gilt auch für enums)

    struct S {};
    

    definiert man damit einen Typen namens "struct S". Weil "struct S" irgendwann zu viel Tipparbeit wurde, hat man alles über typedefs einmal umgeleitet, weil typedefs kein solches Präfix kriegen. In C++ kann man den Typen über "struct S" und auch einfach über "S" ansprechen. Das hat den Vorteil, dass der Code kürzer ist, man keinen unnötigen neuen Typen einführt und (was mit einem impliziten typedef nicht funktionieren würde) man structs zuverlässiger vorausdeklarieren kann.



  • const_iterator begin() const
    		{return ((const_iterator)_First); }
    	iterator end()
    Hier---->		{return (_Last); }
    

    in der Datei <vector> zeigt er mir ab und zu an dieser Stelle einen Fehler.

    Ich finde den Fehler nicht. Kann es am String liegen?

    Ich kann das Programm 10mal starten ohne ein Problem und auf einmal bringt es einen Fehler.


Anmelden zum Antworten