AccessViolationException Класс

Определение

Исключение, которое возникает при попытке считывания или записи защищенной памяти.

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
Атрибуты

Комментарии

Нарушение доступа возникает в неуправляемом или небезопасном коде, когда код пытается считывать или записывать в память, не выделенную или к которой у него нет доступа. Обычно это происходит, так как указатель имеет плохое значение. Не все операции чтения или записи с помощью плохих указателей приводят к нарушениям доступа, поэтому нарушение доступа обычно указывает на то, что несколько операций чтения или записи произошли через плохие указатели, и что память может быть повреждена. Таким образом, нарушения доступа почти всегда указывают на серьезные ошибки программирования. Четко AccessViolationException идентифицирует эти серьезные ошибки.

В программах, состоящих полностью из проверяемого управляемого кода, все ссылки являются допустимыми или пустыми, а нарушения доступа являются невозможными. Любая операция, которая пытается ссылаться на пустую ссылку в проверяемом NullReferenceException коде, вызывает исключение. Возникает AccessViolationException только в том случае, если проверяемый управляемый код взаимодействует с неуправляемым кодом или небезопасным управляемым кодом.

Диагностика и устранение неполадок исключений AccessViolationException

Исключение AccessViolationException может возникать только в небезопасном управляемом коде или при проверке управляемого кода, взаимодействующего с неуправляемым кодом:

  • Нарушение доступа, возникающее в небезопасном управляемом коде, может быть выражено как NullReferenceException исключение или AccessViolationException исключение в зависимости от платформы.
  • Нарушение доступа в неуправляемом коде, которое передается в управляемый код, всегда оборачивается в AccessViolationException исключение.

В любом случае можно определить и исправить причину AccessViolationException исключения следующим образом:

  • Убедитесь, что память, к которой вы пытаетесь получить доступ, была выделена. AccessViolationException Исключение всегда создается попыткой доступа к защищенной памяти, то есть для доступа к памяти, которая не выделена или не принадлежит процессу.

    Автоматическое управление памятью — это одна из служб, предоставляемых средой выполнения .NET. Если управляемый код предоставляет те же функции, что и неуправляемый код, попробуйте перейти к управляемому коду, чтобы воспользоваться преимуществами этой функции. Дополнительные сведения см. в статье "Автоматическое управление памятью".

  • Убедитесь, что память, к которой вы пытаетесь получить доступ, не повреждена. Если несколько операций чтения или записи произошли через плохие указатели, память может быть повреждена. Обычно это происходит при чтении или записи адресов за пределами предопределенного буфера.

AccessViolationException и блоки try/catch

AccessViolationException Исключения, создаваемые средой выполнения .NET, не обрабатываются catch инструкцией в структурированном обработчике исключений, если исключение возникает за пределами памяти, зарезервированной средой выполнения.

Предостережение

Атрибут HandleProcessCorruptedStateExceptions устарел в текущих версиях .NET. Восстановление из поврежденного состояния процесса— исключений не поддерживается, а атрибут, если он присутствует, игнорируется.

Конструкторы

Имя Описание
AccessViolationException()

Инициализирует новый экземпляр AccessViolationException класса с помощью системного сообщения, описывающего ошибку.

AccessViolationException(SerializationInfo, StreamingContext)
Устаревшие.

Инициализирует новый экземпляр AccessViolationException класса сериализованными данными.

AccessViolationException(String, Exception)

Инициализирует новый экземпляр AccessViolationException класса с указанным сообщением об ошибке и ссылкой на внутреннее исключение, которое является причиной этого исключения.

AccessViolationException(String)

Инициализирует новый экземпляр AccessViolationException класса с указанным сообщением, описывающим ошибку.

Свойства

Имя Описание
Data

Возвращает коллекцию пар "ключ-значение", которые предоставляют дополнительные пользовательские сведения об исключении.

(Унаследовано от Exception)
HelpLink

Возвращает или задает ссылку на файл справки, связанный с этим исключением.

(Унаследовано от Exception)
HResult

Возвращает или задает HRESULT, закодированное числовое значение, назначенное определенному исключению.

(Унаследовано от Exception)
InnerException

Exception Возвращает экземпляр, вызвавшего текущее исключение.

(Унаследовано от Exception)
Message

Возвращает сообщение, описывающее текущее исключение.

(Унаследовано от Exception)
Source

Возвращает или задает имя приложения или объекта, вызывающего ошибку.

(Унаследовано от Exception)
StackTrace

Возвращает строковое представление непосредственных кадров в стеке вызовов.

(Унаследовано от Exception)
TargetSite

Возвращает метод, который вызывает текущее исключение.

(Унаследовано от Exception)

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetBaseException()

При переопределении в производном классе возвращает Exception первопричину одного или нескольких последующих исключений.

(Унаследовано от Exception)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetObjectData(SerializationInfo, StreamingContext)
Устаревшие.

При переопределении в производном классе задает SerializationInfo с информацией об исключении.

(Унаследовано от Exception)
GetType()

Возвращает тип среды выполнения текущего экземпляра.

(Унаследовано от Exception)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Создает и возвращает строковое представление текущего исключения.

(Унаследовано от Exception)

События

Имя Описание
SerializeObjectState
Устаревшие.

Происходит при сериализации исключения для создания объекта состояния исключения, содержащего сериализованные данные об исключении.

(Унаследовано от Exception)

Применяется к

См. также раздел