Aparece un mensaje de error al iniciar
Las infracciones de acceso suelen ocurrir cuando un usuario de computadora ejecuta un programa que intenta acceder a un área de almacenamiento que no está designada para su uso.
Infracción de acceso en la dirección
en el módulo
Lectura de la dirección
Windows Los usuarios pueden ver a menudo errores como Error: infracción de acceso en la dirección 836556F8 (004096da). Lea la dirección 836556F8 (00401000)". Como desarrollador de programas Delphi, tiene más posibilidades de encontrar este error que otros usuarios (^_^).
Una vez que Windows necesita estar fuera de su área de almacenamiento asignada, escriba datos información, sobrescribirá los comandos o datos de otros programas e incluso el sistema operativo. Una vez que esto suceda, el sistema operativo se paralizará o se apagará de alguna forma y tendrá que reiniciar la computadora, por ejemplo, cuando tenga Windows NT. /. Cuando un programa anterior a 2000 encuentra este error, aparecerá Dr. Watson, detendrá el programa, capturará rápidamente algunos detalles del estado y luego lo registrará en forma de texto. Las violaciones de acceso son uno de los errores más molestos que encuentran los programas de Windows. El propósito de este artículo es permitirle encontrar soluciones a las infracciones de acceso en Delphi. En primer lugar, las infracciones de acceso no tienen nada que ver con Microsoft Access.
Al desarrollar programas en Delphi, podemos dividir las infracciones de acceso que tenemos. encuentro en dos. Clase: tiempo de ejecución y tiempo de diseño
I. Violación de acceso en tiempo de diseño
1. Razones de hardware
Es fácil de iniciar o cerrar. El IDE de Delphi y compila el proyecto Delphi. Se produce una infracción de acceso en tiempo de diseño. Hay muchas razones para este error, incluido el BIOS del sistema, el sistema operativo o los circuitos del controlador de hardware. En realidad, algunas tarjetas de sonido, tarjetas gráficas y tarjetas de red. causa este error. ¿Por qué sucede esto en su computadora? Cada tarjeta tiene su propio controlador de dispositivo. Diferentes fabricantes, diferentes versiones de Windows o diferentes versiones de Delphi pueden encontrar diferentes problemas: p>
1. Siga los pasos necesarios para verificar si hay algún conflicto entre los controladores que ha instalado
2. A veces, reducir la resolución de la pantalla puede estabilizar algunos controladores de gráficos extraños. >
p>
3. Si utiliza una placa base de doble procesador, asegúrese de seguir los mismos pasos para cada procesador
4. computadora.
p>
2. Software
Aunque Windows es el sistema operativo más utilizado para las computadoras Intel, debido a vulnerabilidades y errores en el propio Windows, es posible que las aplicaciones funcionen mal. hacer que el sistema operativo se apague rápidamente (a veces la operación El sistema en sí también se cerrará inexplicablemente. Elegir un entorno más estable para el desarrollo del programa es la solución. Los siguientes pasos pueden ayudarlo a evitar que ocurran ciertas violaciones de acceso:
(1) Aunque Windows 9X A pesar de su popularidad, Windows NT/2000 ha demostrado ser un entorno más estable en muchos sentidos, y esto es cierto para casi todas las plataformas de código de Windows.
(2) Asegúrese de haber instalado el último paquete de servicio para Windows NT/2000; encontrará que su máquina se volverá más estable con cada nuevo paquete de servicio instalado.
(3) Cargue las últimas actualizaciones o parches para las distintas versiones de Delphi que utilice (BDE, ADO...), esta es una buena forma de prevenir errores de antemano. Intente utilizar los últimos parches de Delphi; esto reducirá en gran medida la cantidad de errores de infracción de acceso, especialmente durante la fase de diseño.
(4) Si a menudo encuentra errores de infracción de acceso de forma aleatoria en el entorno de desarrollo integrado, es probable que haya instalado los controles, paquetes de software o asistentes incorrectos, y estos controles, paquetes de software o asistentes no están No está escrito ni compilado para la versión de Delphi que está utilizando. Intente desinstalar los controles personalizados (o paquetes de software) uno por uno hasta que se resuelva el problema y luego comuníquese con el proveedor del control para hacer un seguimiento del resultado del problema.
(5) Revise la computadora en busca de cosas inútiles y conflictos de programas. Los programas de software extraños y los productos beta a menudo provocan 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 encuentra con frecuencia mensajes de error similares a "Infracción de acceso", registre estos detalles y luego notifique al fabricante del software que puede estar causando el error.
Ese es todo mi consejo sobre errores de infracción de acceso en tiempo de diseño.
II. Infracción de acceso en tiempo de ejecución
¿Cuáles son los errores comunes de infracción de acceso en tiempo de ejecución en Delphi? ¿Cómo prevenirlo?
Esto sucede en cualquier proceso de desarrollo de software: escribes un programa, lo pruebas y luego lo envías, sólo para que los usuarios te digan que el programa falló.
Puede considerar usar la directiva de compilación {$D} para compilar el programa. Delphi puede crear un archivo de imagen del código fuente, lo que ayudará a localizar errores de infracción de acceso. A través del cuadro de diálogo Opciones del proyecto (Proyecto|Opciones|Enlazador y compilador) puede 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 unidades, la información de depuración aumenta el tamaño del archivo de la unidad y agrega una sobrecarga de memoria adicional, pero no afecta el tamaño o la velocidad del ejecutable final. Los productos que incluyen información de depuración y opciones de archivos de imagen (Proyecto|Opciones|Enlazador) solo pueden usar el comando de compilación {$D+} para completar la información de la línea.
La violación del acceso normalmente sólo se manifiesta en un aspecto del programa. Cuando surge un problema por primera vez, es importante considerar qué acciones tomó el usuario y luego buscar una salida. Desde la perspectiva del usuario, su programa detiene su trabajo y que le informen sobre el problema parece retrasar su solución. Sin embargo, hablar con los usuarios es la única forma eficaz de identificar problemas y mejorar su programa.
Ahora podrás ver que cuando solo obtengas la dirección del conflicto:
"Buscar - Buscar errores...", la ruta exacta, el archivo fuente y donde se encuentra la infracción. ocurrieron se encuentran Qué fácil es acceder a las líneas correctas.
Cuando se produce una infracción de acceso al tiempo de ejecución, sus usuarios recibirán un mensaje de error similar al siguiente:
Infracción de acceso en la dirección
Leer dirección
Si su programa está compilado en el IDE de Delphi con información de depuración, puede encontrar las causas de estas líneas de error en el código fuente.
Una de las causas más comunes de errores de violación de acceso en programas Delphi es el uso de objetos que aún no han sido creados. Si el valor hexadecimal de la segunda dirección es FFFFFFFF o 0000000, lo más probable es que esté accediendo a un objeto no creado. Por ejemplo, llama a un evento en un formulario que no fue creado automáticamente ni instanciado por código.
Procedimiento TfrMain.OnCreate(Sender: TObject);
var BadForm: TBadForm;
begin
// La infracción de acceso ocurrirá aquí
BadForm.Refresh;
end;
Suponiendo que BadForm está en la lista de la ventana de la opción del proyecto "Formularios disponibles (Formularios disponibles)", debe crear y liberar manualmente el ventana. Llamar al método de actualización de la ventana BadForm en el código anterior resultará en una infracción de acceso.
Si "Detener en excepciones de Delphi" está habilitado en la ventana de opciones del depurador, aparecerá el siguiente mensaje.
Este mensaje indica que se produjo una violación de acceso electrónico. 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 el programa fallará:
En el módulo "Project1.exe", en la dirección 0043F193 Acceso se produjo una infracción
Leyendo la dirección 000000.
El primer dígito hexadecimal 0043F193 es la dirección de error de tiempo de ejecución en el código compilado (Project1.exe) donde ocurrió la infracción de acceso. En el entorno de desarrollo integrado, seleccione el elemento del menú "Buscar | Buscar error...", ingrese la dirección del error (0043F193) en el cuadro de diálogo y haga clic en el botón "Aceptar". Delphi recompilará el archivo de su proyecto y mostrará la línea de código donde ocurrió el error de ejecución, en este caso la línea BadForm.Refresh.
A continuación se enumeran las causas más comunes de errores de infracción de acceso en entornos Delphi. Esta lista no cubre todas las posibles infracciones de acceso. Publique su información sobre la infracción de acceso en el foro y podremos intentar resolver el problema juntos; la situación real suele ser mucho más oscura que el error indicado.
1. Llamar a un objeto que no existe
Como se mencionó anteriormente, la causa lógica de la mayoría de las violaciones de acceso es el uso de objetos que no se han creado o no se han liberado. Para evitar este tipo de infracción de acceso, asegúrese de que primero se creen todos los objetos a los que acceda. Por ejemplo, puede abrir la tabla en el evento OnCreate del formulario cuando la tabla se coloca en un módulo de datos no creado (eliminado de la ventana AutoGenerar).
En el siguiente código, se produce una infracción de acceso cuando se llama a un evento en un objeto (b:TBitmap) que ha sido eliminado:
var b:TBitmap
;comenzar
b:=TBitmap.Create;
intentar
// Realizar algunas operaciones en el objeto b
finalmente
b.free;
end;
...
// Dado que b ha sido liberado, se producirá una infracción. error de permiso
b.Canvas.TextOut(0,0,'Esto es una infracción de acceso'
end