Episode

Zugriffsverletzung C0000005

Eine Zugriffsverletzung ist eine Art von Ausnahme, die verursacht wird, wenn eine Anwendung eine ungültige Speicheradresse liest, schreibt oder ausführt.

Der Ausnahmecode ist 0xC0000005

Der erste Ausnahmeparameter (0) ist der Typ des Verstoßes; Lesen (0), Schreiben (1) oder Ausführen (8)

Der zweite Ausnahmeparameter (1) ist die Adresse des Verstoßes.

Führen Sie die folgenden Schritte aus, wenn Sie diese Probleme mit den Debuggingtools für Windows debuggen:

  1. EXR -1
    • Ausnahmecode
    • Parameter[0] - Read (0), Write (1), Execute (8)
    • Parameter[1] - Adresse
  2. ECXR
    • Registrieren von Werten bei der Zugriffsverletzung
    • Assembler-Anweisung
      • Lesen - Blick auf den Ausdruck rechts neben dem Komma
      • Write - Sehen Sie sich den Ausdruck links neben dem Komma an
      • Execute - Sehen Sie sich die Adresse des Ausdrucks an.
  3. k
    • Anzeigen des Anrufstapels bei der Zugriffsverletzung

Die Speicheradresse kann aufgrund eines der folgenden allgemeinen Szenarien ungültig sein:

  • NULL-Zeiger – Adressen zwischen 0x0 und 0x10000 (64K) – z. B. eine Funktion, die in der Regel einen Zeiger zurückgibt, der NULL (0x0) zurückgibt, und der Zeiger wurde ohne Überprüfung aufgerufen.
  • Speicherbeschädigung - die Adresse wurde versehentlich oder böswillig überschrieben - häufig über einen Pufferüberlauf (oder Unterlauf)
  • Use-After-Free – die Adresse war gültig, wird aber jetzt aufgerufen, nachdem sie freigegeben (Daten) oder entladen (Code) wurde.
  • Bit-Flip - RAM (Hardware) Problem, bei dem mindestens ein Bit gekippt ist (selten)

Informationen zu Lese- oder Schreibproblemen finden Sie in der Episode "Lesen" oder "Schreiben" .
Informationen zu Ausführungsproblemen finden Sie in der Ausführungsserie.

Beachten Sie, dass CLR-Anwendungen mit einer System.NullReferenceException-Ausnahme anstelle einer Zugriffsverletzungsausnahme ausgelöst werden, wenn die Adresse zwischen 0x0 und 0x10000 (64K) liegt.

Zusätzliche Ressourcen: