zeiger



  • Wenn ich methode mit Zeiger habe wie

    void test (char * wort)
    {
    }
    

    muss ich dann Zeiger wieder mit

    delete wort;

    löschen?



  • Ja oder nein.
    Es kommt nicht darauf an, ob man einen Zeiger hat, sondern
    - ob der Speicher dahinter dynamisch (per new/new[]) angefordert worden ist
    UND
    - ob die Anwendungsarchitektur das Löschen an dieser Stelle fordert/erwartet (oder der Speicher später noch verwendet oder freigegeben werden soll(.

    Denk dran: Wurde mit new[] angefordert, muss auch mit delete[] freigegeben werden (ebenso new -> delete).

    Im konkreten Fall würde ich sagen:
    - Benutze std::string statt char* und Du bist alle Sorgen los.
    - benutze const, dann wird aus der Schnittstelle heraus klar, was damit gemeint ist.
    - Ich würde von einer Funktion, die Speicher freigibt einen entsprechenden Namen erwarten.

    Gruß,

    Simon2.



  • Danke Simon,
    also

    void test()
    {
        char * wert = new char [30];
        .....
        delete [] wert;
    }
    

    Ich lese Bytes ein und beim ca. 47 MB hört es auf weiterzu arbeiten



  • Was spricht gegen 30 bytes auf dem Stack?

    void test()
    {
        char wert[30];
        .....
    }
    


  • ich lese aus einem vob Datei eine noch nicht bekannte bytelänge ein



  • Spätestens jetzt solltest du deinen tatsächlichen Code posten...


  • Mod

    30 ist aber keine unbekannte Länge. Irgendwo muss bei dir doch die Dynamik reinkommen.



  • borhan schrieb:

    Danke Simon,
    also

    void test()
    {
        char * wert = new char [30];
        .....
        delete [] wert;
    }
    

    Ich lese Bytes ein und beim ca. 47 MB hört es auf weiterzu arbeiten

    Du schaffst Platz für 30 byte und wunderst dich dass es bei 47 MB "aufhört weiterzuarbeiten" (was auch immer das im Klartext bedeuten mag)? Das ist als ob du dir n Smart kaufst und dich wunderst dass du nicht dein ganzes Dorf rumkutschieren kannst weil sich der 500ste weigert einzusteigen. Vergegenwärtige dir nochmal was es mit der Speicherverwaltung und dynamischen Arrays auf sich hat.



  • borhan schrieb:

    ...
    Ich lese Bytes ein und beim ca. 47 MB hört es auf weiterzu arbeiten

    Nochmal: Arbeite mit std::string oder std::vector<char>, std::ifstream und anderen StdLib-Funktionen/Konstrukten !!
    Funktioniert in vielen Zusammenhängen genauso - ist aber viel einfacher UND sicherer! Gerade, wenn es um "dynamische Größen" und "C++-Einsteiger" geht.

    Natürlich musst Du Dich erst ein wenig einlesen ... aber die Zeit sparst Du 3-fach beim Debuggen hinterher wieder ein.
    Ich weiß: Man will erst mal gleich anfangen und mit Bekanntem sich irgendwie zum Ziel hangeln - würde trotzdem dringend raten, dass Du dir hier mal was Neues aneignest.
    Gute Quelle (neben diese Forum hier):
    www.cppreference.com
    www.cplusplus.com/
    www.cplusplus.com/reference/

    Da sind dann oft auch einfach Beispiel dabei...

    Sonst frickelst Du noch ziemlich lange an dem Array-/Speicherzeug rum und kommst nicht zum eigentlichen Thema Deines Programms (oder geht es nur um manuelle Speicherverwaltung?).

    Gruß,

    Simon2.


Anmelden zum Antworten