私は、.Net の「純粋な」マネージ コードでアクセス違反例外を生成/生成することはできないと信じています。.Net を完璧と見なし、相互運用などを通じて (管理されていない) 外部ライブラリを使用しない場合。
私は幻想の中に生きていますか?
次のコードを使用することもできます(ただし、入力の形式が正しくないため、AccessViolationExceptionのみがスローされます)。
IntPtr ptr = new IntPtr(123);
Marshal.StructureToPtr(123, ptr, true);
throw new AccessViolationException();
これは純粋なマネージド コードであり、AccessViolationException を生成します:P
You can e.g. use WPF which does call into your graphics card driver. You can easily get AcessViolationExceptions pre .NET 4.5 those with a buggy graphics card drivers which are not at all uncommon.
In a strange sense you are right. With .NET 4.5 and above you will never get AccessViolationExceptions in managed code anymore because the .NET runtime does not convert an AccessViolation coming from unmanaged code to an AccessViolationException anymore but it does terminate your process immediately. I guess MS support was tired to search for .NET Framework bugs only to find that it was a buggy graphics card driver.
'this' がメソッド呼び出しで null の場合、.NET ジャストインタイム コンパイラは通常、例外を発生させるため、CPU が実際に (何かの途中で) 非同期でスローすることはほとんどありません。cmp [rcx],rcx
アドレスとして 0 を使用する可能性がある前に、例外を発生させるために呼び出しサイトに置きます。NULL ポインタを使用して読み取り可能なメモリを読み取るのに十分な大きさのフィールド オフセットを持つことができるため、これはそれを防ぎます。
http://blogs.msdn.com/b/oldnewthing/archive/2007/08/16/4407029.aspxを参照してください。
魔法はありません。C# は、他のコンパイル済み言語と同じように命令になります。AVが決して起こらないことについて、すべてが居心地が良いと感じる理由はありません.