エピソード

アクセス違反のC0000005 - 読み取りまたは書き込み

読み取りまたは書き込みアクセス違反は、アプリケーションが無効なメモリ アドレスからメモリを読み取りまたは書き込もうとしたときに発生します。 有効にするには、メモリ ページに有効な状態、保護およびが必要です。

メモリはMEM_COMMIT 状態である必要があります。

メモリは任意 の型にすることができます。MEM_IMAGE、MEM_MAPPED、またはMEM_PRIVATE。

読み取り操作の場合メモリの保護は、PAGE_READONLY、PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、またはPAGE_EXECUTE_WRITECOPYである必要があります。

書き込み操作の場合メモリの保護は、PAGE_READWRITE、PAGE_WRITECOPY、PAGE_EXECUTE_READWRITE、またはPAGE_EXECUTE_WRITECOPYである必要があります。

アドレスの状態、保護および種類を表示するには、!address <address を使用します>

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

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

その他のリソース: