AccessViolationException クラス

定義

保護されたメモリに対して読み取りまたは書き込みを行おうとするとスローされる例外。

public ref class AccessViolationException : SystemException
public class AccessViolationException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class AccessViolationException : SystemException
type AccessViolationException = class
    inherit SystemException
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type AccessViolationException = class
    inherit SystemException
Public Class AccessViolationException
Inherits SystemException
継承
AccessViolationException
属性

注釈

アンマネージド コードまたはアンセーフ コードでは、割り当てられていないメモリ、またはアクセス権のないメモリに対する読み取りまたは書き込みを試行すると、アクセス違反が発生します。 これは通常、ポインターの値が正しくないために発生します。 無効なポインターによる読み取りまたは書き込みがすべてアクセス違反になるとは限らないため、通常、アクセス違反は、無効なポインターによって複数の読み取りまたは書き込みが発生したこと、およびメモリが破損している可能性があることを示します。 したがって、アクセス違反は、ほとんどの場合、重大なプログラミング エラーを示します。 これらの AccessViolationException 重大なエラーを明確に識別します。

完全に検証可能なマネージド コードで構成されるプログラムでは、すべての参照が有効または null であり、アクセス違反は不可能です。 検証可能なコードで null 参照を参照しようとする操作では、例外が NullReferenceException スローされます。 検証 AccessViolationException 可能なマネージド コードがアンマネージド コードまたは安全でないマネージド コードと対話する場合にのみ発生します。

AccessViolationException 例外のトラブルシューティング

例外は AccessViolationException 、安全でないマネージド コードでのみ、または検証可能なマネージド コードがアンマネージド コードと対話する場合にのみ発生します。

  • 安全でないマネージド コードで発生するアクセス違反は、プラットフォームによっては例外またはAccessViolationException例外としてNullReferenceException表すことができます。

  • マネージド コードにバブルアップするアンマネージド コードのアクセス違反は、常に例外で AccessViolationException ラップされます。

どちらの場合も、次のように例外の原因を AccessViolationException 特定して修正できます。

アクセスしようとしているメモリが割り当て済みであることを確認します。 例外 AccessViolationException は常に、保護されたメモリ (つまり、割り当てられないメモリまたはプロセスによって所有されていないメモリにアクセスする) へのアクセスの試行によってスローされます。

自動メモリ管理は、共通言語ランタイムが提供するサービスの 1 つです。 マネージド コードにアンマネージド コードと同じ機能が用意されている場合は、この機能を利用するためにマネージド コードに移行できます。 詳細については、「 Automatic Memory Management」を参照してください。

アクセスしようとしているメモリが破損していないことを確認します。 無効なポインターによって複数の読み取り操作または書き込み操作が発生すると、メモリが破損する場合があります。 これは通常、定義済みのバッファーの外部にあるアドレスに対する読み取りまたは書き込み時に発生します。

AccessViolationException ブロックと try/catch ブロック

.NET Framework 4 以降では、AccessViolationException共通言語ランタイムによって予約されたメモリの外部で例外が発生した場合、共通言語ランタイムによってスローされる例外は、構造化例外ハンドラー内のステートメントによって処理catchされません。 このような例外を AccessViolationException 処理するには、例外が HandleProcessCorruptedStateExceptionsAttribute スローされるメソッドに属性を適用します。 この変更は、ユーザー コードによってスローされる例外には影響 AccessViolationException しません。これは、ステートメントによって catch 引き続きキャッチされる可能性があります。 .NET Framework 4 で変更せずに再コンパイルして実行する以前のバージョンの.NET Framework用に記述されたコードの場合は、アプリの構成ファイルに要素を追加<legacyCorruptedStateExceptionsPolicy>できます。 またはAppDomain.UnhandledExceptionイベントのハンドラーを定義している場合は、例外の通知をAppDomain.FirstChanceException受け取ることもできます。

バージョン情報

この例外は、.NET Framework 2.0 以降のバージョンでスローされます。 以前のバージョンの.NET Frameworkでは、アンマネージド コードまたは安全でないマネージド コードのアクセス違反は、NullReferenceExceptionマネージド コード内で表されます。 A NullReferenceException は、検証可能なマネージド コードで null 参照が逆参照され、データの破損を伴わない状況が発生し、バージョン 1.0 または 1.1 の 2 つの状況を区別する方法がない場合にもスローされます。

管理者は、選択したアプリケーションがバージョン 1.1 の動作.NET Framework戻すことを許可できます。 アプリケーションの構成ファイルの <runtime> Element セクションに次の行を配置します。

<legacyNullReferenceExceptionPolicy enabled = "1"/>

コンストラクター

AccessViolationException()

エラーを説明するシステム提供メッセージを使用して、AccessViolationException クラスの新しいインスタンスを初期化します。

AccessViolationException(SerializationInfo, StreamingContext)

シリアル化したデータを使用して、AccessViolationException クラスの新しいインスタンスを初期化します。

AccessViolationException(String)

指定したメッセージでエラーを説明する AccessViolationException クラスの新しいインスタンスを初期化します。

AccessViolationException(String, Exception)

指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、AccessViolationException クラスの新しいインスタンスを初期化します。

プロパティ

Data

例外に関する追加のユーザー定義情報を提供する、キーと値のペアのコレクションを取得します。

(継承元 Exception)
HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。

(継承元 Exception)
HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。

(継承元 Exception)
InnerException

現在の例外の原因となる Exception インスタンスを取得します。

(継承元 Exception)
Message

現在の例外を説明するメッセージを取得します。

(継承元 Exception)
Source

エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。

(継承元 Exception)
StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。

(継承元 Exception)
TargetSite

現在の例外がスローされたメソッドを取得します。

(継承元 Exception)

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の根本原因である Exception を返します。

(継承元 Exception)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetObjectData(SerializationInfo, StreamingContext)

派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。

(継承元 Exception)
GetType()

現在のインスタンスのランタイム型を取得します。

(継承元 Exception)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在の例外の文字列形式を作成して返します。

(継承元 Exception)

イベント

SerializeObjectState
互換性のために残されています。

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。

(継承元 Exception)

適用対象

こちらもご覧ください