PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C, VS2010 64bit] Zugriffsverletzung 0xC0000005


Gast
2012-06-08, 13:48:40
Hallo,

Ich bekomme zur Laufzeit meines Programms bei einem Aufruf von malloc() folgende Fehlermeldung:

Unbehandelte Ausnahme bei 0x774e33dd in MyApp.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000000101d60075.

Laut Callstack passiert das in einer Funktion _heap_alloc() aus der Sourcedatei malloc.c beim Aufruf einer Funktion HeapAlloc(). HeapAlloc() hat als ersten Parameter eine offenbar globale Variable _crtheap, mit dem Wert 0x0000000101d60001, ich denke mal das ist ein Pointer auf die erste freie Position im Heap. Die Menge der zu allokierenden Bytes ist 2100.

Ich könnte mir vorstellen, dass da versucht wird, 2100 Bytes ab der Adresse 0x0000000101d60001 zu allokieren, und dies daran scheitert, dass an der Adresse 0x0000000101d60075, also nur 0x74 = 116 Bytes weiter, irgendetwas ist, dass dem im Wege steht. Nur: wie kann ich herausfinden, was das sein könnte?

Und was ist die Adresse 0x774e33dd? Ist die von einer Funktion oder eines Codeteils?

Danke für eure Hilfe.

Gast
2012-06-08, 15:01:57
ich habe eine neue Vermutung, woran es liegen könnte. Ich habe mir mal die Adresse von _crtheap, also nicht die, wo _crtheap drauf zeigt, sondern die von _crtheap selbst, also &_crtheap, im Debugger anzeigen lassen, und die liegt schon bedrohlich nahe an den Adressen von anderen Variablen, die ich in meinem Programm benutze. Wäre also durchaus möglich, dass da irgendwo über den zulässigen Speicherbereich hinausgeschrieben wird, in den Bereich hinein, in dem der Wert von _crtheap steht, und dadurch _crtheap auf einen unzulässigen Wert gesetzt wird.

Gast
2012-06-08, 16:30:37
Wie es aussieht, war es das tatsächlich. Kurz vor _crtheap lag ein Array, über dessen Grenze hinausgeschrieben wurde. Jetzt klappt wieder alles :)