[C++/VS] Zugriffsverletzung bei Memory Dump

cwriter

Erfahrenes Mitglied
Hallo Welt

Ich habe ein Programm mit dem Visual Studio-eigenen Leak-Detector getestet, da ich die Daten jeweils viel zu schnell irgendwo verstauben lassen. Seltsamerweise bekomme ich bei Beendigung des Programmes einen "0xC0000005: Zugriffsverletzung beim Lesen an Position 0x03593618"-Fehler geschmissen, und nicht mitten im Programm, was ein bisschen praktischer wäre.
Ohne das
C++:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
am Anfang des Programmes läuft allerdings alles gut. Selbst im Release-Mode, der normalerweise mehr crasht als der Debug-Mode, läuft alles ohne Mucken.

Der Fehler wird in der Datei "dbgheap.c" auf Zeile 2403 (Funktion __crtIsBadReadPtr()) angegeben.
Er tritt allerdings nur im von VS gestarteten Debug-Mode auf. Selbst mit CTRL-F5 passiert nix.

Habe ich VS kaputtgemacht?

Gruss
cwriter
 
Das klingt verdächtig so, als ob du über einen zugewiesenen Bereich rausschreiben würdest.

Setz mal _CRTDBG_CHECK_ALWAYS_DF bei _CtrSetDbgFlag mit dazu. Das wird zwar langsamer laufen, aber prüft dafür bei jedem Zugriff. Da kommst du evtl. eher an eine unsaubere Stelle.
 
Das klingt verdächtig so, als ob du über einen zugewiesenen Bereich rausschreiben würdest.
Ja, tut es. Allerdings ist selbst mit
C++:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
keine Meldung/Warnung zu sehen, bevor das Programm in die __crtIsBadReadPtr() zurückkehrt. :(

Normalerweise würde ja die Releaseversion beim Speicherzugriffsfehler crashen, doch hier ist nur die mit den Debugprüfungen das Problem. :confused:

Gruss
cwriter

/EDIT: Selbst mit allem Sinnvollen, was ich finden konnte, stürzt es ohne kluge Meldung ab.
C++:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_CRT_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
 
Zuletzt bearbeitet:
Das ist dann immer ärgerlich. Ich würde da anfangen, großzügig Programmteile bzw. deren Aufrufe auszukommentieren, und so das Problem eingrenzen.
 
Ich würde da anfangen, großzügig Programmteile bzw. deren Aufrufe auszukommentieren, und so das Problem eingrenzen.
Seufz. Darauf hätte ich eigentlich auch selbst kommen können:rolleyes:
Interessanterweise war es kein Overflow, sondern ein verwaistes Objekt, das nicht gelöscht wurde. Praktisch, dass der Analyzer dabei abstürzt :confused:

Könnte das vielleicht daran liegen, dass das Objekt in einer geladenen .DLL auftrat? Oder ist das einfach ein bisschen schwarze Magie von C++?

Ansonsten wäre das Thema erledigt, eine kleine Bitte @ Admin hätte ich allerdings noch: Könnte mein Retter den Titel noch korrigieren, damit ich mir nicht ganz so "dumb" vorkomme? Besten Dank!;) (Selbst gefunden. Neue Oberflächen sind doch immer wieder eine Herausforderung :) )

cwriter

/EDIT: Wurde das "Danke" wirklich durch "Gefällt mir ersetzt"? :eek:
 

Neue Beiträge

Zurück