Hilfe mein Programm muellt mir den Speicher voll...



  • Hallo,

    mein Programm muellt mir den Speicher voll, selbst wenn ich z. B. Dateien wieder schliess, wird der benoetigte Speicher nicht weniger (wie vermutet) sondern mehr!

    Kann ich irgendwie herausfinden, was an einem Programm wieviel Speicher braucht?

    Danke und mfg
    rodo

    (ich verwend VC++ 6.0)



  • Nur mal so als Checkliste:

    Für jedes new ein passendes delete?
    Für jedes new[] ein passendes delete[]?
    Für jedes GetDC ein passendes ReleaseDC?
    Für jedes File.Open ein passendes File.Close?

    öhm, das war's schon, mehr fällt mir grad net ein.



  • Woher weißt du, dass der benötigte Speicher mehr wird?
    Doch nicht extwa von dem Taskmanager von Win2000/XP?
    Der gibt nämlich dem gerade laufenden Programm immer großzügig auf vorschuss, solange genug davon da ist.



  • @dEUs
    Das sollte eigentlich der Fall sein - da hab ich auch als erstes geschaut.

    @SeppSchrot
    Hab schon im Taskmanager (XP) nachgeschaut, aber:

    Ich hab da ne relativ aufwaendige Berechung mit grossen Matrizen, die er nicht packt (Fehlermeldung: "virtueller Speicher voll"). Da war dann der "virtuelle Speicher" fuer mein Prog bei ca. 1,3 GB und die "Speicherauslastung" ging hoch, bis der Speicher voll war (komischerweise wurde aber ZUERST der virtualle Speicher verwendet).

    Danach hab ich halt mal geschaut, was der Speicher macht, wenn ich mit kleineren Matrizen rechne und was er macht, wenn ich das Dokument wieder schliess und gesehen, dass der benoetigte Speicher laut Taskmanager stetig waechst.

    Generell:
    Gibt es in VC++ 6.0 irgendeine Moeglichkeit im DEBUG-Modus zu sehen, wieviel Speicher aktuell benoetigt wird? Dann koennte ich einfach mal das Programm durchgehen und suchen...

    Danke und mfg
    rodo



  • komischerweise wurde aber ZUERST der virtualle Speicher verwendet

    Es wird immer nur der virtuelle Speicher verwendet.

    Hast du mal 'nen Überschlag gemacht, wieviel du so brauchst?

    Wenn du einen Debug-Build unterm debugger startest und durchlaufen läßt bekommst du eine Liste der Speicherleaks bzgl. new/delete. Einen intensiveren check kannst du mit verschiedenen Tools (BoundsChecker, GlowCode, etc.) durchführen. GlowCode hat auch eine 14-Tage-eval....



  • Hi peterchen,

    danke fuer die Antwort!

    Eigentlich muesste der Speicher gut reichen - es kann eigentlich nur noch daran liegen, dass ich ihn nicht (richtig) freigebe. Ich versteh aber nicht warum...

    Naja, ich werds mal mit dem GlowCode anschaun, vielleicht find ich ja dann wenigstens wo ich den Fehler hab.

    mfg
    rodo



  • Hallo nochmal,

    Wenn du einen Debug-Build unterm debugger startest und durchlaufen läßt bekommst du eine Liste der Speicherleaks bzgl. new/delete.

    Wo ist denn diese Liste? Hab sie leider nicht gefunden...

    Einen intensiveren check kannst du mit verschiedenen Tools (BoundsChecker, GlowCode, etc.) durchführen.

    Ich habs dafuer mal mit GlowCode getestet. Ich hab gesehen, dass der Destruktor von Matrix viel, viel weniger oft aufgerufen wird, als der Konstruktor. Komischerweise findet er aber fast keine memory leaks (insgesammt ca 5kb) - woran kann das denn liegen?

    Danke nochmal und mfg
    rodo



  • Für die Liste musst du mit F5 starten und wieder beenden (nach Aktionen, die vermutlich Speicherlecks verursachen).
    Dann erscheint die Liste da, wo auch deine TRACES landen.

    Wenn da nix in der Art zu finden ist, dann hast du wohl keine. 😉
    Um ganz sicher zu gehen, kannst du ja mal eines einbauen (was du danach aber wieder wegmachst), dann siehst du es ja.

    🙂


Anmelden zum Antworten