Konsolenfenster zugeklickt - Zeiger im Vector: Au weia?



  • Hallo liebe Community!

    vector <some_type*> ein_sack_voller_zeiger;
    

    Angenommen mein Konsolenfenster wird zugeklickt und es sind nicht alle
    Zeiger per delete freigegeben: Eigentlich gibt das OS den Heap frei, oder?



  • Betriebssysteme wie WinVista machen das, aber es ist schlechter Programmierstil sich auf so etwas zu verlassen.



  • > Betriebssysteme wie WinVista

    Ach, das machen alle NT-Kernel. Aber dagegen kann man als Programmierer auch nichts tun.



  • ein_sack_voller_zeiger
    

    😃 👍



  • Hä? schrieb:

    > Betriebssysteme wie WinVista

    Ach, das machen alle NT-Kernel. Aber dagegen kann man als Programmierer auch nichts tun.

    wieso sollte man das wollen? Oo



  • unskilled schrieb:

    Hä? schrieb:

    > Betriebssysteme wie WinVista

    Ach, das machen alle NT-Kernel. Aber dagegen kann man als Programmierer auch nichts tun.

    wieso sollte man das wollen? Oo

    Wenn man ein_ram_voller_nicht_gebrauchten_speicher haben will. 😉



  • drakon schrieb:

    Wenn man ein_ram_voller_nicht_gebrauchten_speicher haben will. 😉

    Dann lässt man das Programm doch laufen. Am besten baut man sich gleich so eine Funktion: 😉

    void VerschwendeRAM(size_t AnzahlBytes);
    

    Aber sofern man ernsthaft programmiert, sollte man sich schon um die Freigabe von angefordertem Speicher - auch bei Programmende - kümmern. Wenn man sich beim Design etwas überlegt und RAII verwendet, stellt das auch gar kein Problem dar.



  • Er sprach dabei, die Konsole zu zu klicken!!! Da wird kein Destruktor o. delete aufgerufen! Da kannst du nur auf das OS hoffen!



  • Hä? schrieb:

    Er sprach dabei, die Konsole zu zu klicken!!! Da wird kein Destruktor o. delete aufgerufen! Da kannst du nur auf das OS hoffen!

    Bleibt noch die Möglichkeit einen os-abhängigen Handler zu setzen, der das Aufräumen erledigt.



  • delet0r and free0r schrieb:

    Bleibt noch die Möglichkeit einen os-abhängigen Handler zu setzen, der das Aufräumen erledigt.

    Alternativ kann man einfach vernünftig programmieren und davon ausgehen, dass Programme im Normalfall richtig beendet werden.



  • Nexus schrieb:

    delet0r and free0r schrieb:

    Bleibt noch die Möglichkeit einen os-abhängigen Handler zu setzen, der das Aufräumen erledigt.

    Alternativ kann man einfach vernünftig programmieren und davon ausgehen, dass Programme im Normalfall richtig beendet werden.

    Man kann auch von einem User erwarten, das er sein Programm vorzeitig abbricht (Klick aufs Kreuz oben rechts, du weißt schon.) und lieber früher zum Schwimmen geht.
    Also, hier wurde genannt, das beim Zuklicken eines Konsolenfensters kein Destruktor und kein delete aufgerufen wird. In dem Fall sehe ich fürs Freigeben des Speichers nur noch die Möglichkeit eines Handlers, der dann den "ein_sack_voller_zeiger" frei gibt.



  • delet0r and free0r schrieb:

    In dem Fall sehe ich fürs Freigeben des Speichers nur noch die Möglichkeit eines Handlers, der dann den "ein_sack_voller_zeiger" frei gibt.

    Aus des Sicht des Programmierers. Das OS 'merkt', wenn ein Programm beendet wird und gibt die Ressourcen frei. Ein Handler ist nicht nötig.



  • entwarn0r schrieb:

    delet0r and free0r schrieb:

    In dem Fall sehe ich fürs Freigeben des Speichers nur noch die Möglichkeit eines Handlers, der dann den "ein_sack_voller_zeiger" frei gibt.

    Aus des Sicht des Programmierers. Das OS 'merkt', wenn ein Programm beendet wird und gibt die Ressourcen frei. Ein Handler ist nicht nötig.

    seh ich auch so...
    wenn wer den prozess per task-mgr abschießt, kann ich auch nich garantieren, dass ich meinen speicher selbst freigebe - wenn ich ein programm nicht richtig beende, passieren nun mal komische dinge...

    bb



  • delet0r and free0r schrieb:

    Man kann auch von einem User erwarten, das er sein Programm vorzeitig abbricht (Klick aufs Kreuz oben rechts, du weißt schon.) und lieber früher zum Schwimmen geht.

    Bei GUI-Anwendungen kann man das Kreuz-Klicken aber meistens an eine Aktion binden, das Programm wird also nicht einfach geschlossen. Und da hat man nicht viel zusätzlichen Code, sondern kann die Anwendung auf normale Weise verlassen.

    delet0r and free0r schrieb:

    In dem Fall sehe ich fürs Freigeben des Speichers nur noch die Möglichkeit eines Handlers, der dann den "ein_sack_voller_zeiger" frei gibt.

    Geht das überhaupt sinnvoll? Falls ja, ist es wahrscheinlich mit relativ viel Aufwand verbunden, der mir nicht gerechtfertigt scheint. Wenn der Benutzer will, dass sein Programm korrekt aufgeräumt wird, soll er es gefälligst richtig beenden.

    Ausserdem kannst du gar nicht alle Fehler beheben und solltest auch nicht in die Richtung programmieren. Wie willst du reagieren, wenn du gerade in eine Datei schreibst und der Benutzer den Stecker zieht?



  • Nexus schrieb:

    Bei GUI-Anwendungen kann man das Kreuz-Klicken aber meistens an eine Aktion binden, das Programm wird also nicht einfach geschlossen. Und da hat man nicht viel zusätzlichen Code, sondern kann die Anwendung auf normale Weise verlassen.

    Ja, aber hier handelt es sich um eine Konsolenanwendung.

    Nexus schrieb:

    Geht das überhaupt sinnvoll? Falls ja, ist es wahrscheinlich mit relativ viel Aufwand verbunden, der mir nicht gerechtfertigt scheint. Wenn der Benutzer will, dass sein Programm korrekt aufgeräumt wird, soll er es gefälligst richtig beenden.

    Der Aufwand ist nicht allzu hoch, unter Windows zumindest:
    http://msdn.microsoft.com/en-us/library/ms685049(VS.85).aspx

    Nexus schrieb:

    Ausserdem kannst du gar nicht alle Fehler beheben und solltest auch nicht in die Richtung programmieren. Wie willst du reagieren, wenn du gerade in eine Datei schreibst und der Benutzer den Stecker zieht?

    Irgendwas in Richtung "File Journaling System Emulation".
    Will ich aber zum Glück nicht machen. 🙂
    Außerdem geht es hier um die Freigabe von Vektorelementen.


Anmelden zum Antworten