エピソード

アクセス違反 C0000005

アクセス違反は、アプリケーションが無効なメモリ アドレスを読み取り、書き込み、または実行したときに発生する例外の一種です。

例外コードが0xC0000005

最初の例外パラメーター (0) は違反の型です。読み取り (0)、書き込み (1) または実行 (8)

2 番目の例外パラメーター (1) は違反のアドレスです。

Windows 用デバッグ ツールでこれらの問題をデバッグするときは、次の手順に従います。

  1. .exr -1
    • 例外コード
    • Parameter[0] - 読み取り (0)、書き込み (1)、実行 (8)
    • Parameter[1] - Address
  2. .ecxr
    • アクセス違反で値を登録する
    • アセンブラー命令
      • 読み取り - コンマの右側にある式を確認する
      • 書き込み - コンマの左側にある式を確認します
      • Execute - 式のアドレスを見る
  3. k
    • アクセス違反で呼び出し履歴を表示する

メモリ アドレスは、次の一般的なシナリオのいずれかが原因で無効である可能性があります。

  • NULL ポインター - 0x0と0x10000 (64K) の間のアドレス (通常は NULL (0x0) を返すポインターを返す関数など)、ポインターは検証なしでアクセスされました
  • メモリ破損 - アドレスが誤ってまたは悪意を持って上書きされた - 一般的にバッファー オーバーラン (またはアンダーラン) を介して
  • Use-After-Free - アドレス 有効でしたが、解放 (データ) またはアンロード (コード) 後にアクセスされるようになりました
  • ビット フリップ - 1 つ以上のビットが反転している RAM (ハードウェア) の問題 (まれ)

読み取りまたは書き込みの問題については、読み取りまたは書き込みのエピソードを参照してください。
実行の問題については、Execute エピソードを参照してください。

アドレスが 0x0 と 0x10000 (64K) の間にある場合、アクセス違反例外ではなく System.NullReferenceException 例外がスローされることに注意してください。

その他のリソース: