dynamischen speicher frei geben



  • Hallo!

    Und zwar hab ich ein dynamisches 2D - array angelegt. Und nun möchte ich, bevor mein Programmfenster schließt den Speicherplatz natürlich wieder freigeben.
    Hab das folgendermaßen implementiert:

    for (int i = 0; i < area_size; ++i) {
    delete [] area[i];
    }
    delete [] area;
    

    Mein Compiler schreit zwar nicht, aber das heißt ja noch lang nicht, dass das korrekt ist. Jetzt wollt ich fragen, ob mir jemand sagen kann, ob das stimmt, oder ob ich da einen kompletten Blödsinn fabriziert haben?
    Danke ...


  • Mod

    life_drake schrieb:

    Hallo!

    Und zwar hab ich ein dynamisches 2D - array angelegt. Und nun möchte ich, bevor mein Programmfenster schließt den Speicherplatz natürlich wieder freigeben.
    Hab das folgendermaßen implementiert:

    for (int i = 0; i < area_size; ++i) {
    delete [] area[i];
    }
    delete [] area;
    

    Mein Compiler schreit zwar nicht, aber das heißt ja noch lang nicht, dass das korrekt ist. Jetzt wollt ich fragen, ob mir jemand sagen kann, ob das stimmt, oder ob ich da einen kompletten Blödsinn fabriziert haben?
    Danke ...

    Hängt davon ab, wie du den Speicher angefordert hast.



  • Nein, das ist nicht korrekt. Du benutzt int für Größenangaben. Das ist absolut falsch! Der korrekte Type ist std::size_t . Aber zumindest solltest du ein Vorzeichenlosen Type benutzen!

    (Aber ohne zu sehen wie du den Speicher angefordert hast, kann man natürlich weitere Fehler nicht sehen)

    btw. solltest du lieber automatische Speicherfreigabe benutzen zB std::vector oä



  • Speicher hab ich wie folgt angefordert:

    int ** area = new int *[area_size];			
    for (int i = 0; i < area_size; ++i) {
    	area[i] = new int [area_size];		
    }
    

    Ich wills vorerst mal nicht automatisch freigeben! ... Aber danke für den Tip.


  • Mod

    rüdiger schrieb:

    Nein, das ist nicht korrekt. Du benutzt int für Größenangaben. Das ist absolut falsch! Der korrekte Type ist std::size_t . Aber zumindest solltest du ein Vorzeichenlosen Type benutzen!

    Ist das nicht eher eine Frage des möglichen Wertebereichs von area_size? Der Hinweis selbst ist ja gut und richtig - aber int als absolut falsch hinzustellen, ist etwas übertrieben.

    @life_drake: Dann ist das soweit in Ordnung.



  • @camper thx



  • camper schrieb:

    rüdiger schrieb:

    Nein, das ist nicht korrekt. Du benutzt int für Größenangaben. Das ist absolut falsch! Der korrekte Type ist std::size_t . Aber zumindest solltest du ein Vorzeichenlosen Type benutzen!

    Ist das nicht eher eine Frage des möglichen Wertebereichs von area_size? Der Hinweis selbst ist ja gut und richtig - aber int als absolut falsch hinzustellen, ist etwas übertrieben.

    Er war schon immer Missionar, habe Nachsicht 🙂

    MfG SideWinder



  • camper schrieb:

    rüdiger schrieb:

    Nein, das ist nicht korrekt. Du benutzt int für Größenangaben. Das ist absolut falsch! Der korrekte Type ist std::size_t . Aber zumindest solltest du ein Vorzeichenlosen Type benutzen!

    Ist das nicht eher eine Frage des möglichen Wertebereichs von area_size? Der Hinweis selbst ist ja gut und richtig - aber int als absolut falsch hinzustellen, ist etwas übertrieben.

    Natürlich ist int falsch. Wenn area_size den Typ int hat, ist das auch falsch. Zwei Fehler machen aber kein Richtig 🙂

    Signed-Integer für Größenangaben zu verwenden sorgt einfach für unmengen an potentiellen Ärger (darunter Sicherheitslücken!). Also sollte man sich so etwas direkt abgewöhnen.

    @Side Winder


Log in to reply