Heapfreigabe ???



  • Du musst garnix selbst mit dem Heap machen, reicht schon wenn du irgendwo nett Speicher überschreibst der nicht dir gehört.

    Guck mal die Stellen durch wo du mit "rohem Speicher" arbeitest, CString::GetBuffer und so Zeugs. Einige Dinge haben sich durchaus in der MFC geändert, und da waren auch einige breaking-changes dabei. IIRC auch einige die nicht in einem Compilezeit-Fehler enden sondern erst zur Laufzeit Probleme machen.


  • Mod

    Streue in Deinem Code

    ASSERT(AfxCheckMemory());
    

    Irgendwann wirst Du einen ASSERT bekommen.



  • Das Problem mit dem abschmieren tritt beim Beenden des Programms auf.Ablauf : daten speichern ja nein ---> das funzt noch aber egal ob ja oder nein beim endgültigen programm verlassen kommt der Fehler:

    Unbehandelte Ausnahme bei 0x7c91120e in ***.exe: Benutzerhaltepunkt

    und im Degugger schon genannter Text.

    und das mit dem haltepunkt begreif ich erst gar nix weil ich alle entfernt hab.


  • Mod

    Wie schon geschrieben. Dein Heap-Speicher ist überschrieben worden durch irgendetwas was Du machst.

    Wie ich schon geschrieen habe:

    Streue in Deinem Code

    ASSERT(AfxCheckMemory());
    

    Irgendwann wirst Du einen ASSERT bekommen.



  • Verwende den PageHeap, dann findest Du es sehr schnell raus, was passiert.
    Dazu brauchst Du die Debugging Tools for Windows und aktivierst mittels "glflags" den "Full Page Heap" für Deine APplikation.
    Dann wird *sofort* ein Breakpoint getriggert, wenn was nicht passt.
    Es ist nicht nötig irgendwas in Deinen Code zu "streuen".
    Du brauchst aber etwas mehr Speicher, da für jede Allokation eine eigene Page allokiert wird (deswegen Full-Page-Heap 😉 )


  • Mod

    Es geht auch durch setzen von _CRTDBG_CHECK_ALWAYS_DF mit _CrtSetDbgFlag, dann wird immer bei jeder Allokation ein Heapcheck durchgeführt!



  • Hab das mal mit dem win debugtool gemacht und da ist es ganz lustig geworden beim normalen beenden des programms kommt keine fehlermeldung wenn ich jedoch abspeicher bringt er mir nen "anderen" Fehler.
    konkret statt:
    "Unbehandelte Ausnahme bei 0x7c91120e Benutzerhaltepunkt"

    "Unbehandelte Ausnahme bei 0x1020a752 Zugriffsverletzung-Leseposition 0x02592124"

    und diese wiederum kommt beim öffnen einer dll datei, welche aber erst im fertigen programm entsteht.... alles irgendwie wirr.



  • Jochen Kalmbach schrieb:

    Verwende den PageHeap, dann findest Du es sehr schnell raus, was passiert.
    Dazu brauchst Du die Debugging Tools for Windows und aktivierst mittels "glflags" den "Full Page Heap" für Deine APplikation.
    Dann wird *sofort* ein Breakpoint getriggert, wenn was nicht passt.
    Es ist nicht nötig irgendwas in Deinen Code zu "streuen".
    Du brauchst aber etwas mehr Speicher, da für jede Allokation eine eigene Page allokiert wird (deswegen Full-Page-Heap 😉 )

    Oh wie geil ist das denn 🙂 🙂
    Danke für den Tip, das Feature kannte ich noch nicht!


  • Mod

    Es geht auch ohne die Debugging Tools indem Du den Application Verifier benutzt!
    Dann geht das ganze sogar mit dem normalen Visual Studio!
    Debug -> Start with Applicatioj Verifier.

    Die Einstellungen des Application Verifiers kann man einfach in seinem Propjekt machen...

    Siehe auch:
    http://blog.m-ri.de/index.php/2007/03/02/der-application-verifier-mein-neuer-freund/



  • Die tools sind echt klasse der Fehler liegt in einer Zugriffsverletzung auf eine dll - Datei. Diese hat er sich beim upgrade auf ".net" selbst angelegt. Aber so richtig weiß ich jetzt trotzdem nicht was ich da tuen kann.

    trotzdem danke


  • Mod

    zwolf schrieb:

    Aber so richtig weiß ich jetzt trotzdem nicht was ich da tuen kann.

    Deinen Bug damit finden und beheben 🤡


Anmelden zum Antworten