AccessViolationException クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
保護されたメモリに対して読み取りまたは書き込みを行おうとするとスローされる例外。
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 、これらの重大なエラーを明確に識別します。
完全に検証可能なマネージド コードで構成されるプログラムでは、すべての参照が有効か 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。 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) |
events
SerializeObjectState |
互換性のために残されています。
例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。 (継承元 Exception) |