C# catch блокът не се изпълнява, когато AccessViolationException е хвърлен

В следния код искам да чета данни с помощта на Marshal. Самата функция работи добре (стига дължината да отговаря на показалеца, разбира се). Написах единичен тест, за да проверя някои възможни резултати от copyDataFromMemory и забелязах, че AccessViolationException е хвърлен, но тестът ми спира точно там и не изпълнява моя catch-блок. Ето моят код:

private static double[] copyDataFromMemory(PointerLengthPair pointerLengthPair)
{
     double[] dataChain = new double[pointerLengthPair.Length];
     try
     {
         Marshal.Copy(pointerLengthPair.Pointer, dataChain, 0, pointerLengthPair.Length);
     }
     catch (AccessViolationException)
     {        
         return null;
     }
     catch (Exception)
     {
         return null;
     }

     return dataChain;
}

public class PointerLengthPair
{
    public IntPtr Pointer { get; private set; }
    public int Length { get; private set;}

    public PointerLengthPair(IntPtr pointer, int length)
    {
        Pointer = pointer;
        Length = length;
    }
}

Сега въпросът ми е: Това някакъв проблем с Visual Studio 2012 ли е? Има ли настройки, които трябва да избера или просто не е възможно да хвана AccessViolationException? Или пропускам нещо очевидно?

(забележка: моля, игнорирайте, че в момента използвам null като върната стойност. Ще заменя това с обект от нов клас възможно най-скоро)


person Mickey    schedule 07.07.2014    source източник
comment
Трябва да опитате да прочетете документацията за AccessViolationException: Започвайки с .NET Framework 4, изключенията на AccessViolationException, изхвърлени от общата среда за изпълнение на езика, не се обработват от оператора catch в структурирана манипулатор на изключения, ако изключението се случи извън паметта, запазена от общия език време на изпълнение. [...]   -  person Jon    schedule 07.07.2014
comment
Благодаря ти. Изглежда, че съм пропуснал тази част.   -  person Mickey    schedule 07.07.2014