AccessViolationException Clase
Definición
Excepción que se genera cuando se intenta leer o escribir en la memoria protegida.The exception that is thrown when there is an attempt to read or write protected memory.
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
- Herencia
- Atributos
Comentarios
Se produce una infracción de acceso en código no administrado o no seguro cuando el código intenta leer o escribir en memoria que no se ha asignado o al que no tiene acceso.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. Esto suele ocurrir porque un puntero tiene un valor incorrecto.This usually occurs because a pointer has a bad value. No todas las lecturas o escrituras con punteros no válidos llevan a infracciones de acceso; por lo tanto, una infracción de acceso suele indicar que se han realizado varias lecturas o escrituras con punteros no válidos y se ha dañado la memoria.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. Por lo tanto, las infracciones de acceso casi siempre indican errores de programación graves.Thus, access violations almost always indicate serious programming errors. Un AccessViolationException identifica claramente estos errores graves.An AccessViolationException clearly identifies these serious errors.
En los programas que componen todo el código administrado comprobable, todas las referencias son válidas o nulas, y las infracciones de acceso son imposibles.In programs consisting entirely of verifiable managed code, all references are either valid or null, and access violations are impossible. Cualquier operación que intente hacer referencia a una referencia nula en código comprobable produce una NullReferenceException excepción.Any operation that attempts to reference a null reference in verifiable code throws a NullReferenceException exception. AccessViolationExceptionSolo se produce cuando el código administrado comprobable interactúa con código no administrado o con código no seguro administrado.An AccessViolationException occurs only when verifiable managed code interacts with unmanaged code or with unsafe managed code.
Solución de problemas de excepciones de AccessViolationExceptionTroubleshooting AccessViolationException exceptions
Una AccessViolationException excepción solo puede producirse en código administrado no seguro o cuando el código administrado comprobable interactúa con código no administrado:An AccessViolationException exception can occur only in unsafe managed code or when verifiable managed code interacts with unmanaged code:
Una infracción de acceso que se produce en código administrado no seguro se puede expresar como una NullReferenceException excepción o una AccessViolationException excepción, en función de la plataforma.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.
Una infracción de acceso en código no administrado que se propaga hasta el código administrado siempre se encapsula en una AccessViolationException excepción.An access violation in unmanaged code that bubbles up to managed code is always wrapped in an AccessViolationException exception.
En cualquier caso, puede identificar y corregir la causa de la excepción de la AccessViolationException manera siguiente:In either case, you can identify and correct the cause of the AccessViolationException exception as follows:
Asegúrese de que la memoria a la que intenta obtener acceso se haya asignado.Make sure that the memory that you are attempting to access has been allocated. AccessViolationExceptionSiempre se produce una excepción al intentar tener acceso a la memoria protegida, es decir, para tener acceso a la memoria que no está asignada o que no es propiedad de un proceso.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.
La administración automática de la memoria es uno de los servicios que proporciona Common Language Runtime.Automatic memory management is one of the services that the common language runtime provides. Si el código administrado proporciona la misma funcionalidad que el código no administrado, puede que desee pasar a código administrado para aprovechar esta funcionalidad.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. Para obtener más información, consulta Automatic Memory Management.For more information, see Automatic Memory Management.
Asegúrese de que la memoria a la que intenta obtener acceso no esté dañada.Make sure that the memory that you are attempting to access has not been corrupted. Si se han realizado varias operaciones de lectura o escritura con punteros no válidos, es posible que la memoria esté dañada.If several read or write operations have occurred through bad pointers, memory may be corrupted. Esto suele ocurrir cuando se leen o escriben en direcciones fuera de un búfer predefinido.This typically occurs when reading or writing to addresses outside of a predefined buffer.
AccessViolationException y bloques try/catchAccessViolationException and try/catch blocks
A partir de .NET Framework 4, AccessViolationException las excepciones producidas por el Common Language Runtime no se controlan mediante la catch instrucción en un controlador de excepciones estructurado si la excepción se produce fuera de la memoria reservada por el Common Language Runtime.Starting with .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. Para controlar este tipo de AccessViolationException excepción, aplique el HandleProcessCorruptedStateExceptionsAttribute atributo al método en el que se produce la excepción.To handle such an AccessViolationException exception, apply the HandleProcessCorruptedStateExceptionsAttribute attribute to the method in which the exception is thrown. Este cambio no afecta a AccessViolationException las excepciones iniciadas por el código de usuario, que pueden seguir siendo detectadas por una catch instrucción.This change does not affect AccessViolationException exceptions thrown by user code, which can continue to be caught by a catch statement. Para el código escrito para versiones anteriores de .NET Framework que desea volver a compilar y ejecutar sin modificaciones en .NET Framework 4, puede Agregar el <legacyCorruptedStateExceptionsPolicy> elemento al archivo de configuración de la aplicación.For code written for previous versions of .NET Framework that you want to recompile and run without modification on .NET Framework 4, you can add the <legacyCorruptedStateExceptionsPolicy> element to your app's configuration file. Tenga en cuenta que también puede recibir notificaciones de las excepciones si ha definido un controlador para AppDomain.FirstChanceException el AppDomain.UnhandledException evento o.Note that you can also receive notification of the exceptions if you have defined a handler for the AppDomain.FirstChanceException or AppDomain.UnhandledException event.
Información de versiónVersion Information
Esta excepción se produce en .NET Framework 2,0 y versiones posteriores.This exception is thrown on .NET Framework 2.0 and later versions. En versiones anteriores de .NET Framework, una infracción de acceso en código no administrado o código administrado no seguro se representa mediante un NullReferenceException en código administrado.In earlier versions of .NET Framework, an access violation in unmanaged code or unsafe managed code is represented by a NullReferenceException in managed code. NullReferenceExceptionTambién se produce una excepción cuando se desreferencia una referencia nula en el código administrado comprobable, una repetición que no implica daños en los datos y no hay ninguna manera de distinguir entre las dos situaciones en las versiones 1,0 o 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.
Los administradores pueden permitir que las aplicaciones seleccionadas vuelvan al comportamiento de .NET Framework versión 1,1.Administrators can allow selected applications to revert to the behavior of .NET Framework version 1.1. Coloque la siguiente línea en la sección < > elemento en tiempo de ejecución del archivo de configuración de la aplicación:Place the following line in the <runtime> Element section of the configuration file for the application:
<legacyNullReferenceExceptionPolicy enabled = "1"/>
Constructores
| AccessViolationException() |
Inicializa una nueva instancia de la clase AccessViolationException con un mensaje proporcionado por el sistema que describe el error.Initializes a new instance of the AccessViolationException class with a system-supplied message that describes the error. |
| AccessViolationException(SerializationInfo, StreamingContext) |
Inicializa una nueva instancia de la clase AccessViolationException con datos serializados.Initializes a new instance of the AccessViolationException class with serialized data. |
| AccessViolationException(String) |
Inicializa una nueva instancia de la clase AccessViolationException con un mensaje especificado que describe el error.Initializes a new instance of the AccessViolationException class with a specified message that describes the error. |
| AccessViolationException(String, Exception) |
Inicializa una nueva instancia de la clase AccessViolationException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.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. |
Propiedades
| Data |
Obtiene una colección de pares clave/valor que proporciona información definida por el usuario adicional sobre la excepción.Gets a collection of key/value pairs that provide additional user-defined information about the exception. (Heredado de Exception) |
| HelpLink |
Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.Gets or sets a link to the help file associated with this exception. (Heredado de Exception) |
| HResult |
Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception. (Heredado de Exception) |
| InnerException |
Obtiene la instancia Exception que produjo la excepción actual.Gets the Exception instance that caused the current exception. (Heredado de Exception) |
| Message |
Obtiene un mensaje que describe la excepción actual.Gets a message that describes the current exception. (Heredado de Exception) |
| Source |
Devuelve o establece el nombre de la aplicación o del objeto que generó el error.Gets or sets the name of the application or the object that causes the error. (Heredado de Exception) |
| StackTrace |
Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.Gets a string representation of the immediate frames on the call stack. (Heredado de Exception) |
| TargetSite |
Obtiene el método que produjo la excepción actual.Gets the method that throws the current exception. (Heredado de Exception) |
Métodos
| Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual.Determines whether the specified object is equal to the current object. (Heredado de Object) |
| GetBaseException() |
Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions. (Heredado de Exception) |
| GetHashCode() |
Sirve como la función hash predeterminada.Serves as the default hash function. (Heredado de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.When overridden in a derived class, sets the SerializationInfo with information about the exception. (Heredado de Exception) |
| GetType() |
Obtiene el tipo de tiempo de ejecución de la instancia actual.Gets the runtime type of the current instance. (Heredado de Exception) |
| MemberwiseClone() |
Crea una copia superficial del Object actual.Creates a shallow copy of the current Object. (Heredado de Object) |
| ToString() |
Crea y devuelve una representación de cadena de la excepción actual.Creates and returns a string representation of the current exception. (Heredado de Exception) |
Eventos
| SerializeObjectState |
Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception. (Heredado de Exception) |