Почему доступ к памяти в самом нижнем адресном пространстве (не нулевом) сообщается .NET как NullReferenceException?

Это вызывает AccessViolationException:

using System;

namespace TestApplication
{
    internal static class Program
    {
        private static unsafe void Main()
        {
            ulong* addr = (ulong*)Int64.MaxValue;
            ulong val = *addr;
        }
    }
}

Это вызывает NullReferenceException:

using System;

namespace TestApplication
{
    internal static class Program
    {
        private static unsafe void Main()
        {
            ulong* addr = (ulong*)0x000000000000FF;
            ulong val = *addr;
        }
    }
}

Они оба являются недействительными указателями и оба нарушают правила доступа к памяти. Почему возникает NullReferenceException?

30
задан angry person 29 October 2011 в 19:09
поделиться