Frage zu Zeigern



  • Nein, es ist kein Memoryleak, da nirgends Speicher auf dem Heap angefordert wurde.

    Und ja, as Objekt liegt rein zufällig noch im Speicher, weil es noch nicht mit neuen Daten überschrieben wurde. Es kann geradesogut etwas anderes dort stehen, was zu einer Zugriffsverweigerung führen sollte. Deshalb sollte man solche Dinge (wie auch Rückgabe von lokalen Zeigern/Referenzen) vermeiden.


  • Mod

    Der Speicherbereich ist nach verlassen des Scopes freigegeben und kann überschrieben werden. dein Beispiel funktioniert, weil du zwischen der Freigabe und dem Abruf keine neuen Objekte anlegst. Aber du kanst dich nicht darauf verlassen. Theoretisch dürften sogar andere Programme an die Stelle schreiben, praktisch wird solcher Speicher jedoch in der Regel nicht (sofort) an das OS zurückgegeben.



  • Theoretisch dürften sogar andere Programme an die Stelle schreiben

    Und was viel wichtiger ist. Threads können da den Speicher brauchen. Das ein anderes Programm an die Stelle schreibt ist eher unwahrscheinlich.



  • Wie is das eigentlich mit Speicherreservierungen so im Allgemeinen, wird jeder Speicher, der in irgend einer Weise von einem C++-Programm verwendet wird, egal ob er wieder sauber freigegeben wird oder nicht, nach Beendigung eines Programms so oder so wieder für andere Anwendungen freigegeben? Mit anderen Worten: Kann man sich mit c++-Programmen SPeicher "kaputt" machen? 🙂



  • TheBrain schrieb:

    Wie is das eigentlich mit Speicherreservierungen so im Allgemeinen, wird jeder Speicher, der in irgend einer Weise von einem C++-Programm verwendet wird, egal ob er wieder sauber freigegeben wird oder nicht, nach Beendigung eines Programms so oder so wieder für andere Anwendungen freigegeben? Mit anderen Worten: Kann man sich mit c++-Programmen SPeicher "kaputt" machen? 🙂

    Mit modernen OS nicht. Da wird alles nach dem Beenden vom OS aufgeräumt.
    Allerdings schreibt das der Standard nicht vor. Grundsätzlich ist es also theoretsisch möglich den Speicher zu "zerstören".



  • Der Speicher sollte eigentlich beim Beenden des Programms wieder freigegeben werden. Nur passiert das meistens nicht sofort, sondern braucht eine gewisse Zeit.



  • Spätestens aber nach einem Neustart, oder?



  • TheBrain schrieb:

    Spätestens aber nach einem Neustart, oder?

    Jo. Aber wie gesagt da musst du dir bei modernen OS keine Sorge machen. Da wird alles aufgeräumt. Allerdings ist das noch kein Grund deinen Speicher nicht aufzuräumen. 😉



  • Ach menno, wollte das gerade als Freifahrtschein zum unsauberen Programmieren betrachten 😉



  • Kann ja auch mal vorkommen, dass der Code auf einer Plattform laufen muss, auf der es kein großartiges OS gibt, dass Dir hinterher räumt.


  • Mod

    Oder auf einer Plattform die nie neu startet...


Anmelden zum Antworten