AccessViolationException Класс

Определение

Исключение, возникающее при попытке чтения или записи в защищенную область памяти.The exception that is thrown when there is an attempt to read or write protected memory.

public ref class AccessViolationException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class AccessViolationException : SystemException
type AccessViolationException = class
    inherit SystemException
Public Class AccessViolationException
Inherits SystemException
Наследование
AccessViolationException
Атрибуты

Комментарии

Нарушение прав доступа возникает в неуправляемом или ненадежном коде, когда код пытается выполнить чтение или запись в память, которая не была выделена или к которой у него нет доступа.An access violation occurs in unmanaged or unsafe code when the code attempts to read or write to memory that has not been allocated, or to which it does not have access. Обычно это происходит из-за неправильного значения указателя.This usually occurs because a pointer has a bad value. Не все операции чтения или записи по неправильным указателям приводят к нарушениям прав доступа, поэтому нарушение прав доступа обычно указывает, что таких операций было несколько и что память может быть повреждена.Not all reads or writes through bad pointers lead to access violations, so an access violation usually indicates that several reads or writes have occurred through bad pointers, and that memory might be corrupted. Таким же нарушение прав доступа почти всегда свидетельствует о серьезных ошибках программирования.Thus, access violations almost always indicate serious programming errors. AccessViolationException ясно определяет эти серьезные ошибки.An AccessViolationException clearly identifies these serious errors.

В программах, полностью состоящих из проверяемого управляемого кода, все ссылки являются допустимыми или равны NULL, и нарушения прав доступа невозможны.In programs consisting entirely of verifiable managed code, all references are either valid or null, and access violations are impossible. Любая операция, которая пытается ссылаться на пустую ссылку в проверяемом коде, вызывает исключение NullReferenceException.Any operation that attempts to reference a null reference in verifiable code throws a NullReferenceException exception. AccessViolationException возникает только в том случае, если проверяемый управляемый код взаимодействует с неуправляемым кодом или с небезопасно управляемым кодом.An AccessViolationException occurs only when verifiable managed code interacts with unmanaged code or with unsafe managed code.

Устранение неполадок AccessViolationException ExceptionsTroubleshooting AccessViolationException exceptions

Исключение AccessViolationException может возникать только в небезопасном управляемом коде или при взаимодействии проверяемого управляемого кода с неуправляемым кодом:An AccessViolationException exception can occur only in unsafe managed code or when verifiable managed code interacts with unmanaged code:

  • Нарушение прав доступа, возникающее в ненадежном управляемом коде, может быть выражено как исключение NullReferenceException или AccessViolationException исключением в зависимости от платформы.An access violation that occurs in unsafe managed code can be expressed as either a NullReferenceException exception or an AccessViolationException exception, depending on the platform.

  • Нарушение прав доступа в неуправляемом коде, которое передается в управляемый код, всегда упаковывается в исключение AccessViolationException.An access violation in unmanaged code that bubbles up to managed code is always wrapped in an AccessViolationException exception.

В любом случае можно найти и исправить причину исключения AccessViolationException следующим образом:In either case, you can identify and correct the cause of the AccessViolationException exception as follows:

Убедитесь, что память, в которую производится доступ, была выделена.Make sure that the memory that you are attempting to access has been allocated.
AccessViolationException исключение всегда создается попыткой доступа к защищенной памяти, то есть для доступа к памяти, которая не является выделенной или не принадлежит процессу.An AccessViolationException exception is always thrown by an attempt to access protected memory -- that is, to access memory that is not allocated or that is not owned by a process.

Автоматическое управление памятью — это одна из служб, которые предоставляет среда CLR.Automatic memory management is one of the services that the common language runtime provides. Если управляемый код предоставляет те же функциональные возможности, что и неуправляемый код, вам может потребоваться перейти на управляемый код, чтобы воспользоваться преимуществами этой функции.If managed code provides the same functionality as your unmanaged code, you may wish to move to managed code to take advantage of this functionality. Для получения дополнительной информации см. Automatic Memory Management.For more information, see Automatic Memory Management.

Убедитесь, что память, в которую производится доступ, не была повреждена.Make sure that the memory that you are attempting to access has not been corrupted.
Если несколько операций чтения или записи произошли по неправильным указателям, память может быть повреждена.If several read or write operations have occurred through bad pointers, memory may be corrupted. Обычно это происходит при чтении или записи в адреса за пределами предопределенного буфера.This typically occurs when reading or writing to addresses outside of a predefined buffer.

Блоки AccessViolationException и try/catchAccessViolationException and try/catch blocks

Начиная с .NET Framework 4.NET Framework 4, AccessViolationException исключения, вызываемые средой CLR, не обрабатываются оператором catch в структурированном обработчике исключений, если исключение происходит вне памяти, зарезервированной средой CLR.Starting with the .NET Framework 4.NET Framework 4, AccessViolationException exceptions thrown by the common language runtime are not handled by the catch statement in a structured exception handler if the exception occurs outside of the memory reserved by the common language runtime. Для решения подобного исключения AccessViolationException следует применить атрибут HandleProcessCorruptedStateExceptionsAttribute к методу, в котором создается исключение.To handle such an AccessViolationException exception, you should apply the HandleProcessCorruptedStateExceptionsAttribute attribute to the method in which the exception is thrown. Это изменение не влияет на AccessViolationException исключения, вызванные пользовательским кодом, который может продолжать перехватываться инструкцией catch.This change does not affect AccessViolationException exceptions thrown by user code, which can continue to be caught by a catch statement. Для кода, написанного для предыдущих версий .NET Framework, которые требуется перекомпилировать и выполнить без изменения в .NET Framework 4.NET Framework 4, можно добавить элемент <легацикорруптедстатиксцептионсполици > в файл конфигурации приложения.For code written for previous versions of the .NET Framework that you want to recompile and run without modification on the .NET Framework 4.NET Framework 4, you can add the <legacyCorruptedStateExceptionsPolicy> element to your app's configuration file. Обратите внимание, что можно также получить уведомление об исключениях, если вы определили обработчик для события AppDomain.FirstChanceException или AppDomain.UnhandledException.Note that you can also receive notification of the exceptions if you have defined a handler for the AppDomain.FirstChanceException or AppDomain.UnhandledException event.

Сведения о версииVersion Information

Это исключение возникает в .NET Framework 2,0 и более поздних версиях.This exception is thrown in the .NET Framework 2.0 and later versions. В более ранних версиях .NET Framework нарушение прав доступа в неуправляемом коде или незащищенном управляемом коде представлено NullReferenceException в управляемом коде.In earlier versions of the .NET Framework, an access violation in unmanaged code or unsafe managed code is represented by a NullReferenceException in managed code. NullReferenceException также вызывается, когда пустая ссылка разыменована в проверяемом управляемом коде, не затрагивается повреждение данных, и невозможно различить две ситуации в версиях 1,0 и 1,1.A NullReferenceException is also thrown when a null reference is dereferenced in verifiable managed code, an occurrence that does not involve data corruption, and there is no way to distinguish between the two situations in versions 1.0 or 1.1.

Администраторы могут разрешить выбранным приложениям вернуться к поведению .NET Framework версии 1,1.Administrators can allow selected applications to revert to the behavior of the .NET Framework version 1.1. Поместите следующую строку в раздел <среды выполнения> элемента файла конфигурации для приложения:Place the following line in the <runtime> Element section of the configuration file for the application:

<legacyNullReferenceExceptionPolicy enabled = "1"/>  

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

AccessViolationException()

Инициализирует новый экземпляр класса AccessViolationException с системным сообщением, содержащим описание ошибки.Initializes a new instance of the AccessViolationException class with a system-supplied message that describes the error.

AccessViolationException(SerializationInfo, StreamingContext)

Инициализирует новый экземпляр класса AccessViolationException с сериализованными данными.Initializes a new instance of the AccessViolationException class with serialized data.

AccessViolationException(String)

Инициализирует новый экземпляр класса AccessViolationException с использованием заданного сообщения, содержащего описание ошибки.Initializes a new instance of the AccessViolationException class with a specified message that describes the error.

AccessViolationException(String, Exception)

Инициализирует новый экземпляр класса AccessViolationException указанным сообщением об ошибке и ссылкой на внутреннее исключение, вызвавшее данное исключение.Initializes a new instance of the AccessViolationException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Свойства

Data

Возвращает коллекцию пар ключ/значение, предоставляющие дополнительные сведения об исключении, определяемые пользователем.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

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

Получает или задает ссылку на файл справки, связанный с этим исключением.Gets or sets a link to the help file associated with this exception.

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

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

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

Возвращает экземпляр класса Exception, который вызвал текущее исключение.Gets the Exception instance that caused the current exception.

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

Возвращает сообщение, описывающее текущее исключение.Gets a message that describes the current exception.

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

Возвращает или задает имя приложения или объекта, вызывавшего ошибку.Gets or sets the name of the application or the object that causes the error.

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

Получает строковое представление непосредственных кадров в стеке вызова.Gets a string representation of the immediate frames on the call stack.

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

Возвращает метод, создавший текущее исключение.Gets the method that throws the current exception.

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

Методы

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

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

Служит хэш-функцией по умолчанию.Serves as the default hash function.

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

При переопределении в производном классе задает объект SerializationInfo со сведениями об исключении.When overridden in a derived class, sets the SerializationInfo with information about the exception.

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

Возвращает тип среды выполнения текущего экземпляра.Gets the runtime type of the current instance.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Создает и возвращает строковое представление текущего исключения.Creates and returns a string representation of the current exception.

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

События

SerializeObjectState

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

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

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

Дополнительно