Quién puede ayudarme a traducir: Dirección 690c1769 conflicto de acceso. Por favor lea la dirección 690c1769.

Solución de infracción de acceso (redireccionado desde Internet) 2009-02-03 16:33 visita

Infracción (acceso ilegal), error de protección general (error de protección general) o error de página no válida (ninguno)

Fallo de página), aunque diferentes, esencialmente siempre son causados ​​por el mismo tipo de error. Las violaciones de acceso a menudo ocurren en las computadoras.

Un programa ejecutado por el usuario intentó acceder a un área de almacenamiento que no estaba designada para su uso.

Dirección <Hex Value>

En el módulo <Application Name>

Leer dirección<Hex Value> >;

Los usuarios de Windows pueden ver a menudo mensajes de error similar a "Error: infracción de acceso en la dirección 836556f8".

(004096da). Lea la dirección 836556F8 (00401000). Como desarrollador de programas Delphi, encontré este error.

Hay más errores (_) que otros usuarios.

Una vez que Windows quiera escribir información de datos fuera del área de almacenamiento que se le ha asignado, sobrescribirá los comandos o números de otros programas e incluso el sistema operativo.

Según. Una vez que esto sucede, el sistema operativo falla o se apaga de alguna manera y debes reiniciar tu computadora. Por ejemplo, cuando el siguiente programa en Windows NT/2000 encuentra este error, aparece Dr. Watson y detiene el programa para capturar algunos detalles rápidos.

Parte del estado se registra entonces en forma de texto. Las violaciones de acceso son algunos de los errores más molestos que encuentran los programas de Windows.

A. El propósito de este artículo es permitirle encontrar formas de resolver conflictos de acceso en Delphi. Primero, la infracción de Access

no tiene nada que ver con Microsoft Access.

Al desarrollar programas con Delphi, podemos dividir los conflictos de acceso encontrados en dos categorías: tiempo de ejecución y período de diseño.

1. Infracciones de acceso en la fase de diseño

1. Razones de hardware

Al iniciar o cerrar el IDE de Delphi y compilar un proyecto de Delphi, es fácil errores de diseño para que se produzcan violaciones de acceso. El acceso a la información sobre violaciones en el funcionamiento de su computadora puede deberse a varias razones, incluido el BIOS del sistema, el sistema operativo o los controladores de hardware. Algunas tarjetas de sonido, tarjetas gráficas y tarjetas de red pueden hacerlo. causa este error. ¿Por qué dices eso? Cada tarjeta de tu ordenador

tiene su propio controlador de dispositivo. Puede ser diferente para diferentes fabricantes, diferentes versiones de Windows o diferentes versiones de Delphi.

Pregunta. Los siguientes pasos pueden ayudarle a resolver estos problemas:

1. Siga los pasos necesarios para verificar que no haya conflictos entre los controladores que instaló.

2. A veces, reducir la resolución de la pantalla puede hacer que algunos controladores de gráficos extraños sean más estables.

3. Si utiliza una placa base de doble procesador, asegúrese de que los pasos de modificación para cada procesador sean los mismos.

4. Asegúrese de utilizar los controladores más recientes para todo el hardware de su computadora.

2. Razones de software

Aunque Windows es el sistema operativo más popular en los ordenadores Intel, debido a las vulnerabilidades y defectos inherentes al sistema Windows, el orden de las aplicaciones

El mal funcionamiento puede hacer que el sistema operativo se paralice rápidamente (a veces el propio sistema operativo también se paralizará inexplicablemente). Elige uno más estable.

El entorno de desarrollo del programa es la solución. Los siguientes pasos pueden ayudarle a evitar algunos conflictos de acceso:

(1) Aunque Windows 9X es muy popular, Windows NT/2000 ha sido reemplazado. En muchos aspectos resultó ser un entorno mucho más estable.

Esto es válido para todas las plataformas de código de Windows.

(2) Asegúrese de que esté instalado el último service pack para Windows NT/2000. Cada vez que instale un nuevo paquete de servicio,

encontrará que su máquina se vuelve más estable.

(3) Instalar las actualizaciones o parches actuales (BDE, ADO...) para las distintas versiones de Delphi que utilice le ayudará a prevenir errores por adelantado.

Método. Intente utilizar los últimos parches de Delphi; especialmente durante el diseño, la cantidad de errores de infracción de acceso se reducirá considerablemente.

(4) Si a menudo encuentra errores de violación de acceso de forma aleatoria en el IDE, es probable que haya instalado un control, paquete o

un asistente incorrecto que no es su versión. de Delfos Escrito o compilado. Intente desinstalar los controles (o paquetes) personalizados uno por uno.

Hasta que se resuelva el problema, comuníquese con el fabricante del control para seguir el resultado de este problema.

(5) Compruebe si hay cosas inútiles y conflictos de programas en la computadora. Los programas de software extraños y los productos beta suelen provocar errores de infracción de acceso.

(6) Si hay errores en la configuración del sistema, también pueden ocurrir errores de violación de acceso con frecuencia. Si sigue encontrando un error que dice Infracción de acceso con la misma información, registre esos detalles y luego notifique al fabricante del software que puede haber causado el error.

Las anteriores son mis sugerencias para errores de infracción de acceso en tiempo de diseño.

Segundo, infracción de acceso al tiempo de ejecución

¿Cuáles son los errores comunes de infracción de acceso al tiempo de ejecución en Delphi? ¿Cómo prevenirlo?

Cualquier desarrollo de software se encontrará con esta situación: escribes un programa para probarlo, luego lo envías a todas partes y los usuarios te dicen que ha fallado.

Puede considerar usar la directiva del compilador {$D} para compilar su programa; Delphi puede crear una ayuda para localizar errores de infracción de acceso.

Archivo de imagen del código fuente. El cuadro de diálogo "Opciones del proyecto" (Proyecto | Opciones | Vinculador y compilador) le permite especificar todo lo que necesita.

. Para los archivos de unidad, la información de depuración se registra en el archivo de unidad junto con el código objeto de la unidad. Al compilar un programa que utiliza esta unidad,

la información de depuración aumentará el tamaño del archivo de la unidad y la sobrecarga de memoria adicional, pero no afectará el tamaño del archivo ejecutable final.

Velocidad de carrera. Los productos que contienen información de depuración y opciones de archivos de imagen (Proyecto | Opciones | Vinculador) solo se pueden compilar bajo la directiva {$D+}.

Se completará la información de la línea.

Las violaciones de acceso normalmente solo aparecen en un aspecto del programa. Considere lo que hizo el usuario cuando ocurrió el problema por primera vez.

La operación es muy importante y luego buscar avances desde aquí. Desde la perspectiva del usuario, su programa detiene su trabajo y se lo entrega.

Déjame decirte que este problema parece estar retrasando su solución. Sin embargo, comunicarse con los usuarios es la única forma de identificar problemas y mejorar el programa.

Método eficaz.

Ahora sabrás cómo encontrar fácilmente la ruta exacta a un archivo de código fuente y acceder a él cuando solo hayas proporcionado la dirección conflictiva.

Línea de error de infracción:

"Error de búsqueda encontrada..."

Cuando se produce una infracción de acceso al tiempo de ejecución, sus usuarios recibirán algo similar a lo siguiente Mensaje de error:

Dirección<Hex Value>

En el módulo<Application Name>

Leer dirección<Hex value

Si su programa está compilado con depuración información en el IDE de Delphi, puede encontrar la línea de código fuente que causa este error.

En los programas Delphi, una de las causas más comunes de errores de violación de acceso es el uso de un objeto que aún no ha sido creado. Si

La segunda dirección; ¿es FFFFFFF o 0000000? ¿Nueve de cada diez veces es tu visita? Objeto aún no creado. Por ejemplo

Llamaste a un evento en un formulario, pero el formulario no se creó automáticamente y se creó una instancia sin código.

Programa TfrMain. OnCreate(sender:to object);

var BadForm:tbad form;

Inicio

// Aquí se producirá una infracción de acceso.

Mala forma. Actualizar;

Fin;

Supongamos que BadForm está en la lista de la ventana "Formularios disponibles" en las opciones del proyecto; esta ventana debe crearse y publicarse manualmente.

Prioridad/en la capa superior

Llamar al método Refresh de la ventana BadForm en el código facial provocará una infracción de acceso.

Si habilita "Detener excepción de Delphi" en la ventana de opciones del depurador, aparecerá el siguiente mensaje:

Este mensaje indica que se ha producido una violación de EAccess. EAccessViolation es

la clase de excepción para errores de acceso a memoria no válidos.

Este es el mensaje que verás al diseñar tu programa. Aparecerá el siguiente cuadro de mensaje y luego el programa falla:

Infracción de acceso en la dirección 0043F193

En el módulo 'Project1.exe'

Leyendo la dirección 000000.

El primer número hexadecimal 0043F193 es la dirección donde ocurrió el error de ejecución en el código compilado (Project1.exe) con infracción de acceso.

. Seleccione el elemento del menú "Buscar|Buscar error..." en el IDE, ingrese la dirección donde ocurrió el error (0043F193) en el cuadro de diálogo y luego haga clic.

Botón Aceptar. Delphi recompilará el archivo de su proyecto y luego mostrará la línea de código donde ocurrió el error de ejecución. Aquí lo tienes.

BadForm.Refresh.

Las causas más comunes de errores de infracción de acceso en entornos Delphi se enumeran a continuación. Esta lista no los cubre ni puede cubrirlos a todos.

Posibles violaciones de acceso. Publique su información sobre la infracción de acceso en el foro y todos podrán probar una.

Para abordar este problema, los ejemplos prácticos reales son generalmente mucho más oscuros que los errores enumerados.

1. Llamar a un objeto que no existe

Como se mencionó anteriormente, la causa legítima de la mayoría de las violaciones de acceso es el uso de objetos que no han sido creados o no han sido liberados. Para evitar

que se produzca este tipo de infracción de acceso, asegúrese de crear primero todos los objetos a los que acceda. Por ejemplo, al configurar una tabla en un módulo de datos que aún no se ha creado (eliminado de la ventana de creación automática), es posible que se encuentre en el evento OnCreate del formulario.

Abre esta tabla.

En el siguiente código, se produce una infracción de acceso después de llamar a un evento de objeto eliminado (b:TBitmap).

var b:tbit map;

Inicio

b:=TBitmap. Crear;

Probar

//Hacer algo con el objeto B.

Finalmente

b. Gratis

Fin

...

//Porque B tiene liberado, por lo que se produce un error de infracción de acceso.

B.Canvas.TextOut(0, 0, 'Esto es una infracción de acceso');

Fin

2. /p>

p>

Si intenta pasar un parámetro inexistente a una función de Win API, se producirá un error de infracción de acceso. La mejor manera de resolver este tipo de error de infracción de acceso es consultar la ayuda de Win API para verificar la información de los parámetros y los tipos de parámetros de esta llamada a la función API. Por ejemplo,

Asegúrese de no pasar un puntero no válido a un parámetro de búfer.

3. Deje que Delphi publique

Cuando un objeto es propietario de otro objeto, deje que lo elimine por usted. Porque, de forma predeterminada, todos los formularios (creados automáticamente) pertenecen al objeto de la aplicación. Cuando finaliza la aplicación, libera el objeto Aplicación, que también libera todos los formularios. Ejemplo

Por ejemplo, si dos formularios (Form1/Unit1 y Form2/Unit2) se crean automáticamente al comienzo del programa, el siguiente código provocará

un error de infracción de acceso:

p>

Unidad unidad 1;

...

Usar unidad2

...

Programa TForm1. Llame al Formulario 2

Iniciar

Formulario 2. ShowModal

Formulario 2.

Gratis;

//Se producirá un error de infracción de acceso.

Tabla 2. ShowModal

Fin;

4. Elimina el punto de excepción

Nunca destruyas el objeto de excepción temporal (e). Manejar una excepción liberará automáticamente el objeto de excepción. Si usted mismo libera manualmente el objeto de excepción

, el programa intentará liberarlo nuevamente y luego se producirá un error de infracción de acceso:

zero:= 0;

Probar

Dummy:= 10/zero;

Excepto...

Acerca de E: EZeroDivide do

MessageDlg( '¡No se puede dividir entre 0! ', mtError, [mbOK], 0);

Se producirá un error de infracción de acceso.

Fin;

5. Recuperar cadenas vacías

Las cadenas vacías no tienen datos. En otras palabras, recuperar una cadena vacía equivale a acceder a un objeto inexistente, lo que resultará en

Error de infracción de acceso:

var s: string;

Inicio

s:="";

s[1]:= 'a';

//Se producirá un error de infracción de acceso.

Fin;

6. Punteros de referencia directa

Se debe hacer referencia a los punteros indirectamente; de ​​lo contrario, se cambiará la dirección del puntero y se podrán destruir otras unidades de almacenamiento:

Programa TForm1. Button1Click (remitente: al objeto);

Definir variables

p1: puntero

p2: puntero

Inicio

GetMem(p1, 128);

GetMem(p2, 128);

//La siguiente línea provoca un error de infracción de acceso.

Move(p1,p2,128);

//La siguiente línea es correcta.

p2^ mover(p1^, 128);

FreeMem(p1, 128);

FreeMem(p2, 128); p>Fin;

Las anteriores son mis sugerencias para errores de violación de acceso en tiempo de ejecución. Espero que también pueda dar algunas sugerencias para violaciones de acceso en su programa.

Se cometieron algunos errores contra las reglas.