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

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

関連するヒント

  • アクセスしようとしているメモリが割り当て済みであることを確認します。
    自動メモリ管理は、共通言語ランタイムが提供するサービスの 1 つです。 このサービスを利用するために、マネージ コードに移行することもできます。 詳細については、「自動メモリ管理」を参照してください。

  • アクセスしようとしているメモリが破損していないことを確認します。
    無効なポインターによって複数の読み取り操作または書き込み操作が発生すると、メモリが破損する場合があります。

解説

アンマネージ コードまたはアンセーフ コードでは、割り当て済みでないメモリ、またはアクセスできないメモリに対して読み取りまたは書き込みを行おうとするとアクセス違反が発生します。 無効なポインターによる読み取りまたは書き込みがすべてアクセス違反になるとは限らないため、通常、アクセス違反は、無効なポインターによって複数の読み取りまたは書き込みが発生したこと、およびメモリが破損している可能性があることを示します。

マネージ コードでは、すべての参照は有効であるか、null であるかのどちらかです。 NullReferenceException は、検証可能なコード内の null 参照を参照しようとするすべての操作に対してスローされます。

安全でないマネージ コードで発生したアクセス違反は、プラットフォームに応じて NullReferenceException または AccessViolationException として表現されます。

アンマネージ コードのアクセス違反は、そのままマネージ コードに返された場合、常に AccessViolationException 内にラップされます。

参照

処理手順

方法: 例外処理アシスタントを使用する

概念

メモリ管理 : 例

自動メモリ管理