Resevierter Speicher löschen



  • Hallo,
    ich arbeite mit vielen Vector Befehle. Diese sind in einer eignen Unit untergebracht. Frage: reicht es, wenn ich in FormClose folgender Befehl

    myVector.clear();
    

    nutze, um den Speicher freizugeben ?

    bis bald
    Siegfried



  • Hallo

    .clear() gibt den Speicher der vector-Elemente frei.
    Aber es gibt nicht den Speicher von Heap-Instanzen frei, auf die in den vector-Elementen verwiesen wird. Das must du selber erledigen.

    bis bald
    akari



  • Hallo,
    den .clear() nutze ich, wenn ich die Anwendung schliesse. Denke, das das auch so richtig ist.
    ist das viel Arbeit mit den Heap-Instanzen ?

    bis bald
    Siegfried



  • Hallo

    den .clear() nutze ich, wenn ich die Anwendung schliesse. Denke, das das auch so richtig ist.

    Selbstverständlich ist das richtig. Nur nicht ausreichend, wenn du in dem vector Instanzen hast, die du mit new selber angelegt hast

    ist das viel Arbeit mit den Heap-Instanzen ?

    Nein, einfach vor dem clear() alle Elemente durchgehen und delete aud diese anwenden.

    bis bald
    akari



  • Hallo,
    keine Ahnung, wie das geht.

    dies habei ich bis jetzt gemacht.
    in .h

    std::vector<int> myVector;
    

    in .cpp FormShow

    myVector.resize(50);
    

    und in .cpp FormClose

    myVector.Clear();
    

    bis bald
    Siegfried



  • Hallo

    *seufz* bei int ist delete auch gar nicht notwendig. Da reicht das clear() völlig aus, ist beim Programmende eigentlich auch gar nicht mal nötig.

    Ich hab ja geschrieben, das delete nur bei Heap-Instanzen norwendig ist, also wenn du Objekte mit new ertellst.

    bis bald
    akari



  • Hallo,
    Danke für die guten Infos. Ab und zu lerne ich auch etwas von euch hinzu.
    Mit "New" frage ich später noch einmal.

    bis bald
    Siegfried 👍 👍 👍 👍 👍



  • Hallo,
    Noch ein Frage. Welche Möglichkeit habe ich zum überprüfen, ob alle resevierte Speicher auch entfernt wurden. Giebt es in den C++ Optionen etwas ?
    bis bald
    Siegfried



  • Hallo

    - indem du sauber programmierst (jedes new erfordert ein delete) und RAII berücksichtigst (std::auto_ptr)
    - Es gibt externe Programme die sowas untersuchen.
    - in deinem Fall, mit den ints bist du auf jedenfall auf der sicheren Seite.

    bis bald
    akari



  • Hallo,

    wo finde ich so ein Programm, und wie heißt dies ?

    bis bald Siegfried



  • Da du mit dem BCB arbeitest würde ich einfach mal sagen den BCB-internen CodeGuard verwenden. Der ist meines erachtens ziemlich gut. 😉


Anmelden zum Antworten