Heap Corruption Detected
-
Hallo
Erhalte bei meinem Programm einen Debug Error, der da heißt:
Debug Error!
Programm: ...
HEAP CORRUPTION DETECTED: after Normal block(#4610492) at 0x2C07AF80.
CRT detected that the application wrote memory after end of heap buffer.Der Fehler tritt auf wenn ich einen delete aufrufe. Genauer gesagt wird beim Singleton Template das einzige objekt gelöscht. Worauf deutet das hin wie kann ich den Fehler finden?
-
Du hast irgendwo Speicher dynamisch alloziert (Heap) und dann über den gültigen Bereich hinausgeschrieben. Der Fehler ist also nicht in der Zeile mit dem delete zu finden (dort wird er nur erkannt), sondern irgendwo vorher. Alles, was mit malloc/new alloziert wurde, ist verdächtig.
-
Evtl. versuchst Du mehrfach den gleichen Speicher freizugeben.
http://blog.m-ri.de/index.php/2008/10/27/vs-tipps-tricks-heap-bugs-finden-teil-1/
http://blog.m-ri.de/index.php/2008/10/31/vs-tipps-tricks-heap-bugs-finden-teil-2/
http://blog.m-ri.de/index.php/2008/11/04/vs-tipps-tricks-heap-bugs-finden-teil-3/
http://blog.m-ri.de/index.php/2008/11/27/vs-tipps-tricks-heap-bugs-finden-teil-4/
-
Danke euch.
Ich habe mir mal die Artikel durchgelesen. Bin aber nicht weitergekommen:
Beitrag 1: Habe die Codezeilen bei mir plaziert. Allerdings ändert sich nichts. Bleibe erst wieder am delete hängen.
Beitrag 2: Den Application Verifier habe ich installiert. Nun habe ich versucht diesen über VS 2008 zu starten. Geht nicht. Beim Shortcut (Umschalt+Alt+F5) tut sich nichts. Habe den Application Verifier so gestartet. Nun kann ich meine .exe hinzufügen. Aber die besagten Einstellungen finde ich nirgends. Beim Start meiner Applikation tut sich auch nichts!
-
laupert schrieb:
Beitrag 1: Habe die Codezeilen bei mir plaziert. Allerdings ändert sich nichts. Bleibe erst wieder am delete hängen.
Dann ist der Zeiger selbst, den Du da hast ungültig und verweist nicht auf den Speicher der allokiert wurde...
Oder der Speicher wurde schon freigegeben (schreib ich ja schon)...
-
Und wie starte ich den Application Verifier richtig?
-
IMHO wird er nur bei der Professional bzw. Team-Suite integriert.
Es gibt doch einen eigenen Menüeintrag.
Zudem müsste sich Dein fehlereinfacher finden lassen...
-
Hallo.
Ich habe VS 2008 Pro. Allerdings finde ich keinen Menüeintrag.
Habe den Fehler allerdings nun gefunden. Es lag an einer Membervariable, einem Array auf das ein Zeiger zurückgegeben wurde.
Trotzdem nochmals zu dem Application Verifier. Ist ein interessantes Tool. Habe hier aber weder die Einstellungen gefunden die du da beschrieben hast. Noch habe ich irgendwelche Ausgaben gefunden, als mein Code an einer Stelle eine Ausnahmefehler gebracht hat.
-
Hst Du ihn den instlliert.
Im Deinen Programm/Start-Menü muss doch ein Eintrag vorhanden sein, mit dem den den ppVerifier starten kannst...
-
Ja klar das habe ich. Du hast doch aber gemeint dass man dies auch direkt aus VS aufrufen kann. Und dort dann auch Einstellungen vornehmen.
-
Im Application Verifier 4.0 gibt es ein Menü. Darin befinden sich 2 Unterpunkte: Properties und Verifier Stop Options. Beide Menüpunkte sind aber deaktiviert. Egal ob ein Projekt geladen oder nicht. Auch nicht wenn der Debugger gestartet wurde. Was muss man den da machen?
-
Ich weiß nicht was Du da machst.
Wenn ich den Application Verifier 4.0 starte (außerhalb von VS) bekomme ich ein Programm wo ich bestimmte Anwednungen und deren Verifier Schalter definieren kann.
Zudem habe ich in meinem VS auch entsprechende Projekteinstellungen.
Allerdings benutze ich die VS-Team Suite.Zudem gibt es doch eine Doku oder
Hast Du die gelesen?
Es gibt sogar eine FAQ dazu:
http://social.msdn.microsoft.com/Forums/en/vstsappverifier/thread/ed8d0e9e-785d-4bbc-8909-4ece3877d832
-
Gibt es das Menü Edit bei dir nicht?
-
Doch, aber ohne dass Du eine Aplikatin per File -> Add hinzufügst nützt das doch nichts.
Wie wäre es mal mit Doku lesen?
-
Hallo.
Wie wärs mit Beitrag lesen. Nein, also ich habe die Doku gelesen. Aber ich habe ja in meinem Beitrag geschrieben:
Egal ob ein Projekt geladen oder nicht.
Also nochmal. Ich habe ein Projekt hinzugefügt mit Add und habe es auch im Debugger gestartet. Aber das Menü bleibt deaktiviert.
-
Im Applikation Verifier musst Du eine EXE hinzufügen. Kein Projekt!
-
Im Applikation Verifier musst Du eine EXE hinzufügen. Kein Projekt!
Ja. Ist ja ok. Habe ich ja was anderes geht ja auch gar nicht. Geht aber trotzdem nicht!
-
Also Ich habe link eine EXE und rechts im Fenster meine Optionen, die ich setzen möchte.
Wenn Du nun einen Leaf-Node markierst, dann kannst Du auch für diesen Case die "Verifier Stop Options" setzen.
-
Hallo. Ok das hat nun geklappt. Danke. Doch ins Visual Studio habe ich das ganze noch nicht integriert gebracht.