Was passiert beim Schließen der Konsole?



  • Guten Abend zusammen!

    Mein Titel beschreibt eigentlich schon alles, dennoch noch eine Erklärung.
    Wenn man bei einer Konsolenanwendung (hier Windows) das Fenster manuell schließt, bricht das Programm abrupt ab. Mein Problem: Ich habe eine große Menge an dynamischen Speicher, den ich im Programm verwalte. Bei normaler Ausführung kann ich die Ressourcen am Ende freigeben. Aber wenn das Fenster vorher geschlossen wird, bleiben die Daten im Speicher.

    Eine Idee, wie ich das unterbinden kann?

    Beispiel:

    int main()
    {
        int* i = new int[5];
    
        cin.get();
        delete[] i;
        return 0;
    }
    


  • In diesem Fall gibt Windows nach Beendigung deines Programms allen Speicher frei.

    MfG SideWinder



  • SideWinder schrieb:

    In diesem Fall gibt Windows nach Beendigung deines Programms allen Speicher frei.

    MfG SideWinder

    Leider nein, das tut es nicht. Habe es ausgiebig getestet und ich habe keine Möglichkeit gefunden, wie Windows das selbst übernimmt.
    Ich benutze die DirectX SDK und die listet mir exact auf, wie viel Speicher noch als Rest nach Beenden bleibt. Andere Arten von Speicherlecks sind auszuschließen, da sie bei "normaler" Beendung freigegeben werden.



  • Redest du da tatsächlich von Speicher, den du mit new anforderst? Klingt für mich eher so, als würdest du Direct3D verwenden und vergessen irgendwo Release() aufzurufen...In dem Fall hat dein Problem eigentlich absolut nichts mit new, C++, oder der Konsole zu tun...



  • Meloen schrieb:

    SideWinder schrieb:

    In diesem Fall gibt Windows nach Beendigung deines Programms allen Speicher frei.

    MfG SideWinder

    Leider nein, das tut es nicht. Habe es ausgiebig getestet und ich habe keine Möglichkeit gefunden, wie Windows das selbst übernimmt.
    Ich benutze die DirectX SDK und die listet mir exact auf, wie viel Speicher noch als Rest nach Beenden bleibt. Andere Arten von Speicherlecks sind auszuschließen, da sie bei "normaler" Beendung freigegeben werden.

    Tut mir leid, das kam in deinem Posting so nicht vor. Offenbar handelt es sich um nicht-freigegebene COM-Objekte. Ich verschiebe dich mal ins passende Forum.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • dot schrieb:

    Redest du da tatsächlich von Speicher, den du mit new anforderst? Klingt für mich eher so, als würdest du Direct3D verwenden und vergessen irgendwo Release() aufzurufen...In dem Fall hat dein Problem eigentlich absolut nichts mit new, C++, oder der Konsole zu tun...

    Ok, interessant, so hatte ich das nicht betrachtet. Ja, in der Tat ist es eben so, dass die Objekte nicht "Release()"d werden klnnen, wenn ich die Konsole schließe. Ich bekomme Zugriffsverletzungen beim Aufruf von Release().

    Zum Code an sich gibt es nicht viel zu sagen/zeigen, da er eig. leckfrei funktioniert.

    Irgendwelche Ideen?



  • Meloen schrieb:

    Irgendwelche Ideen?

    http://msdn.microsoft.com/en-us/library/ms686016.aspx



  • dot schrieb:

    Meloen schrieb:

    Irgendwelche Ideen?

    http://msdn.microsoft.com/en-us/library/ms686016.aspx

    Super, goldrichtig! Vielen, vielen Dank. Das Problem hatte mir eine Menge Zeit geraubt.

    Danke auch an SideWinder für das Verschieben!


Log in to reply