fragen zu new und delete



  • neomic schrieb:

    das geht wieso?

    Weil das C++ ist 😉 und durch solche Sachen Software abstürzt...

    Deswegen immer sauber programmieren:

    const int BB = 4;
    
    char *text = new char[BB];
    strncpy(text,"dfdgfhi",BB);
    delete [] text;
    

    natürlich ist std::string besser ...

    Das ganze mit den Zeigern und den nicht-überprüfungen ist zwar sch**ße, aber C++ bietet dir eben viel Freiheit und man muss diese Freiheit richtig nutzen und ist somit schneller als mit manch anderen Sprachen.



  • hmmm naja gut überzeugt^^
    also wenn ich das richtig verstanden habe überschreibt der dann quasi den speicher ohne rücksicht auf andere sachen...

    gleich nochmal ne frage...

    wie kann strncat() einen pointer auf den endstring geben? wie geht das? normalerweise verschwinden doch die in der funktion erstelleten variablen im nächsten scope oder gibst da nen trick bei?

    @Freak_Coder lass mal die zensur ;), jeder darf sich hier frei äußern 🙂


  • Mod

    oder auch

    template<typename T, size_t N>
    T* copy_array(const T (&a)[N])
    {
        T* p = new T[ N ];
        memcpy( p, a, sizeof a );
    }
    
    // ...
    char *text = copy_array( "dfdgfhi" );
    // ...
    delete [] text;
    

    schließlich kennt der Compiler die Größe von Stringliteralen.



  • Freak_Coder schrieb:

    const int BB = 4;
    
    char *text = new char[BB];
    strncpy(text,"dfdgfhi",BB);
    delete [] text;
    

    nur mal so als Anmerkung:

    1. strncpy ist eine scheiß Funktion, die man nicht benutzen will
    2. int benutzt man nicht für Größenangaben. Dafür gibt es size_t

    neomic schrieb:

    wie kann strncat() einen pointer auf den endstring geben? wie geht das? normalerweise verschwinden doch die in der funktion erstelleten variablen im nächsten scope oder gibst da nen trick bei?

    wovon sprichst du bitte?



  • rüdiger schrieb:

    wovon sprichst du bitte?

    sry meinte auch strcat()

    char bla[]="asdf";
        cout<<strncat(bla,"qwer");
    

    ausgabe: asdfqwer

    edit: ach lol hab gerade selber noch herausgefunden das der pointer auf das neue "bla" zeigt, sry^^ war ne *kategorieblödefragen* frage -.-


  • Mod

    neomic schrieb:

    ausgabe: asdfqwer

    format C:



  • camper schrieb:

    neomic schrieb:

    ausgabe: asdfqwer

    format C:

    und was willst du mir damit mitteilen?



  • neomic schrieb:

    edit: ach lol hab gerade selber noch herausgefunden das der pointer auf das neue "bla" zeigt, sry^^ war ne *kategorieblödefragen* frage -.-

    "neue "bla""? Äh, ich glaube du hast Pointer noch nicht so ganz verstanden



  • Doch!

    Aber nur wenn ich nüchtern bin 😉



  • rüdiger schrieb:

    "neue "bla""? Äh, ich glaube du hast Pointer noch nicht so ganz verstanden

    ja bin grad seid 7 tagen dran c++ zu lernen also lass mich fehler machen...

    neomic (off) schrieb:

    Doch!

    Aber nur wenn ich nüchtern bin 😉

    fängt man jetzt schon an mich nachzumachen oder was wird das hier?



  • rüdiger schrieb:

    1. strncpy ist eine scheiß Funktion, die man nicht benutzen will

    Hmmm, wieso, weshalb warum 😃 ... Was benutzt man denn, wenn man mit c-array arbeitet ???



  • neomic schrieb:

    und was willst du mir damit mitteilen?

    Dein Code erzeugt undefiniertes Verhalten. Und das bedeutet, dass alles passieren kann. Wenn du Pech hast, wird dein System dadurch so sehr kompromittiert, dass dir nichts anderes übrig bleibt als zu formatieren. :xmas2:

    Freak_Coder schrieb:

    Hmmm, wieso, weshalb warum 😃 ... Was benutzt man denn, wenn man mit c-array arbeitet ???

    Eingebaute Arrays kann man immer noch mit Schleifen bzw. mem... bearbeiten. C-Strings sollte man in C++ generell nicht verwenden. Falls man einen solchen für eine Schnittstelle braucht (zB WinAPI), gibt es immer noch Wege, Arrays als solche bereitzustellen. Siehe std::string::c_str().



  • groovemaster schrieb:

    Eingebaute Arrays kann man immer noch mit Schleifen bzw. mem... bearbeiten. C-Strings sollte man in C++ generell nicht verwenden. Falls man einen solchen für eine Schnittstelle braucht (zB WinAPI), gibt es immer noch Wege, Arrays als solche bereitzustellen. Siehe std::string::c_str().

    Ja, ich weiß das es natürlich bessere Alternativen gibt, als C-Strings.
    Mich hatte nur interessiert wieso strncpy "scheiße (<-rüdiger)" ist, außer das man besser std::string benutzen sollte ...


Anmelden zum Antworten