AccessViolationException クラス

定義

保護されたメモリに対して読み取りまたは書き込みを行おうとするとスローされる例外。The exception that is thrown when there is an attempt to read or write protected memory.

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

注釈

アンマネージコードまたはアンセーフコードでアクセス違反が発生するのは、割り当てられていないメモリに対してコードが読み取りまたは書き込みを試みた場合、またはアクセスできない場合です。An access violation occurs in unmanaged or unsafe code when the code attempts to read or write to memory that has not been allocated, or to which it does not have access. これは通常、ポインターの値が正しくないために発生します。This usually occurs because a pointer has a bad value. 無効なポインターによる読み取りまたは書き込みがすべてアクセス違反になるとは限らないため、通常、アクセス違反は、無効なポインターによって複数の読み取りまたは書き込みが発生したこと、およびメモリが破損している可能性があることを示します。Not all reads or writes through bad pointers lead to access violations, so an access violation usually indicates that several reads or writes have occurred through bad pointers, and that memory might be corrupted. したがって、アクセス違反は、ほとんどの場合、プログラミングエラーが深刻であることを示します。Thus, access violations almost always indicate serious programming errors. AccessViolationException 、これらの重大なエラーを明確に識別します。An AccessViolationException clearly identifies these serious errors.

検証可能なマネージコードだけで構成されるプログラムでは、すべての参照が有効または null であり、アクセス違反は不可能です。In programs consisting entirely of verifiable managed code, all references are either valid or null, and access violations are impossible. 検証可能なコード内の null 参照を参照しようとするNullReferenceException操作では、例外がスローされます。Any operation that attempts to reference a null reference in verifiable code throws a NullReferenceException exception. AccessViolationException 、検証可能なマネージコードがアンマネージコードまたはアンセーフマネージコードと対話する場合にのみ発生します。An AccessViolationException occurs only when verifiable managed code interacts with unmanaged code or with unsafe managed code.

Accessが発生する例外のトラブルシューティングTroubleshooting AccessViolationException exceptions

例外AccessViolationExceptionは、アンセーフマネージコードでのみ、または検証可能なマネージコードがアンマネージコードと対話するときにのみ発生します。An AccessViolationException exception can occur only in unsafe managed code or when verifiable managed code interacts with unmanaged code:

  • アンセーフマネージコードで発生するアクセス違反は、プラットフォームによってNullReferenceException AccessViolationExceptionは、例外または例外として表すことができます。An access violation that occurs in unsafe managed code can be expressed as either a NullReferenceException exception or an AccessViolationException exception, depending on the platform.

  • マネージコードにバブルアップするアンマネージコードのアクセス違反は、常にAccessViolationException例外でラップされます。An access violation in unmanaged code that bubbles up to managed code is always wrapped in an AccessViolationException exception.

どちらの場合も、次のように、 AccessViolationException例外の原因を特定して修正することができます。In either case, you can identify and correct the cause of the AccessViolationException exception as follows:

アクセスしようとしているメモリが割り当て済みであることを確認します。Make sure that the memory that you are attempting to access has been allocated.
AccessViolationException例外は、割り当てられていない、またはプロセスによって所有されていないメモリにアクセスするために、保護されたメモリにアクセスしようとしたときに常にスローされます。An AccessViolationException exception is always thrown by an attempt to access protected memory -- that is, to access memory that is not allocated or that is not owned by a process.

自動メモリ管理は、共通言語ランタイムが提供するサービスの 1 つです。Automatic memory management is one of the services that the common language runtime provides. マネージコードがアンマネージコードと同じ機能を提供する場合は、この機能を利用するために、マネージコードに移行することをお勧めします。If managed code provides the same functionality as your unmanaged code, you may wish to move to managed code to take advantage of this functionality. 詳細については、「 Automatic Memory Management」を参照してください。For more information, see Automatic Memory Management.

アクセスしようとしているメモリが破損していないことを確認します。Make sure that the memory that you are attempting to access has not been corrupted.
無効なポインターによって複数の読み取り操作または書き込み操作が発生すると、メモリが破損する場合があります。If several read or write operations have occurred through bad pointers, memory may be corrupted. これは通常、事前定義されたバッファーの外部のアドレスの読み取りまたは書き込みを行う場合に発生します。This typically occurs when reading or writing to addresses outside of a predefined buffer.

Accessている例外と try/catch ブロックAccessViolationException and try/catch blocks

以降、共通言語ランタイムによってスロー catchされた例外は、共通言語によって予約されているメモリの外部で例外が発生した場合に、構造化例外ハンドラーのステートメントによって処理されません。 .NET Framework 4.NET Framework 4 AccessViolationExceptionランタイム.Starting with the .NET Framework 4.NET Framework 4, AccessViolationException exceptions thrown by the common language runtime are not handled by the catch statement in a structured exception handler if the exception occurs outside of the memory reserved by the common language runtime. このようなAccessViolationException例外を処理するには、 HandleProcessCorruptedStateExceptionsAttribute例外がスローされるメソッドに属性を適用する必要があります。To handle such an AccessViolationException exception, you should apply the HandleProcessCorruptedStateExceptionsAttribute attribute to the method in which the exception is thrown. この変更は、ユーザー AccessViolationExceptionコードによってスローされたcatch例外には影響しません。これは、ステートメントによって引き続きキャッチされる可能性があります。This change does not affect AccessViolationException exceptions thrown by user code, which can continue to be caught by a catch statement. を変更.NET Framework 4.NET Framework 4せずに再コンパイルして実行する .NET Framework の以前のバージョン用に記述されたコードについては、アプリの構成に <legacyCorruptedStateExceptionsPolicy >要素を追加できます。拡張子.For code written for previous versions of the .NET Framework that you want to recompile and run without modification on the .NET Framework 4.NET Framework 4, you can add the <legacyCorruptedStateExceptionsPolicy> element to your app's configuration file. イベントAppDomain.FirstChanceExceptionまたはAppDomain.UnhandledExceptionイベントのハンドラーを定義している場合は、例外の通知を受け取ることもできます。Note that you can also receive notification of the exceptions if you have defined a handler for the AppDomain.FirstChanceException or AppDomain.UnhandledException event.

バージョン情報Version Information

この例外は、.NET Framework 2.0 以降のバージョンでスローされます。This exception is thrown in the .NET Framework 2.0 and later versions. 以前のバージョンの .NET Framework では、アンマネージコードまたはアンセーフマネージコードのアクセス違反はNullReferenceException 、マネージコードので表現されます。In earlier versions of the .NET Framework, an access violation in unmanaged code or unsafe managed code is represented by a NullReferenceException in managed code. またNullReferenceException 、は、検証可能なマネージコードで null 参照が逆参照される場合、データの破損が発生しない場合に、バージョン1.0 または1.1 の2つの状況を区別する方法がない場合にもスローされます。A NullReferenceException is also thrown when a null reference is dereferenced in verifiable managed code, an occurrence that does not involve data corruption, and there is no way to distinguish between the two situations in versions 1.0 or 1.1.

管理者は、選択したアプリケーションを .NET Framework バージョン1.1 の動作に戻すことを許可できます。Administrators can allow selected applications to revert to the behavior of the .NET Framework version 1.1. アプリケーションの構成ファイルの <runtime> Elementセクションに次の行を配置します。Place the following line in the <runtime> Element section of the configuration file for the application:

<legacyNullReferenceExceptionPolicy enabled = "1"/>  

コンストラクター

AccessViolationException()

エラーを説明するシステム提供のメッセージを使用して、AccessViolationException クラスの新しいインスタンスを初期化します。Initializes a new instance of the AccessViolationException class with a system-supplied message that describes the error.

AccessViolationException(SerializationInfo, StreamingContext)

シリアル化したデータを使用して、AccessViolationException クラスの新しいインスタンスを初期化します。Initializes a new instance of the AccessViolationException class with serialized data.

AccessViolationException(String)

エラーを説明する指定したメッセージを使用して、AccessViolationException クラスの新しいインスタンスを初期化します。Initializes a new instance of the AccessViolationException class with a specified message that describes the error.

AccessViolationException(String, Exception)

指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、AccessViolationException クラスの新しいインスタンスを初期化します。Initializes a new instance of the AccessViolationException class with a specified error message and a reference to the inner exception that is the cause of this exception.

プロパティ

Data

例外に関する追加のユーザー定義情報を提供する、キー/値ペアのコレクションを取得します。Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(継承元 Exception)
HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。Gets or sets a link to the help file associated with this exception.

(継承元 Exception)
HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(継承元 Exception)
InnerException

現在の例外の原因となる Exception インスタンスを取得します。Gets the Exception instance that caused the current exception.

(継承元 Exception)
Message

現在の例外を説明するメッセージを取得します。Gets a message that describes the current exception.

(継承元 Exception)
Source

エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。Gets or sets the name of the application or the object that causes the error.

(継承元 Exception)
StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。Gets a string representation of the immediate frames on the call stack.

(継承元 Exception)
TargetSite

現在の例外がスローされたメソッドを取得します。Gets the method that throws the current exception.

(継承元 Exception)

メソッド

Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である Exception を返します。When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(継承元 Exception)
GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

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

派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。When overridden in a derived class, sets the SerializationInfo with information about the exception.

(継承元 Exception)
GetType()

現在のインスタンスのランタイム型を取得します。Gets the runtime type of the current instance.

(継承元 Exception)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在の例外の文字列形式を作成して返します。Creates and returns a string representation of the current exception.

(継承元 Exception)

イベント

SerializeObjectState

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(継承元 Exception)

適用対象

こちらもご覧ください