El cuadro de diálogo emergente al inicio es molesto
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, la probabilidad de encontrar este error es mayor (^_^) que la de otros usuarios.
Una vez que Windows necesita escribir información de datos fuera de su área de almacenamiento asignada , sobrescribirá comandos o datos de otros programas o incluso del sistema operativo.
Una vez que esto suceda, el sistema operativo fallará de alguna forma o se apagará, tendrá que reiniciar su computadora. cuando un programa en Windows NT/2000 encontró este error, el Dr. Watson apareció y detuvo el programa, detectando rápidamente
Algunos detalles de la declaración se registran en forma de texto
Acceso. Las infracciones 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 para las infracciones de acceso en Delphi. Primero, permítanos explicarle que Access
Al desarrollar programas en Delphi, podemos dividir las infracciones de Access encontradas en dos categorías: tiempo de ejecución y tiempo de diseño
I. violaciones de acceso en tiempo
1. Razones de hardware
El IDE de Delphi es propenso a sufrir violaciones de acceso en tiempo de diseño al iniciar o cerrar un proyecto de Delphi y pueden aparecer mensajes de violación de acceso en su equipo. computadora por una variedad de razones causadas por, incluido el BIOS del sistema, el sistema operativo o las líneas de controladores de hardware, ciertas tarjetas de sonido, tarjetas gráficas y tarjetas de red pueden causar este error.
Las tarjetas tienen sus propios controladores de dispositivo. Diferentes fabricantes, diferentes versiones de Windows o diferentes versiones de Delphi pueden encontrar diferentes problemas
Los siguientes pasos pueden ayudarle a resolver estos problemas:
1. Siga los pasos necesarios para verificar si hay algún conflicto entre los controladores instalados
2. A veces, reducir la resolución de la pantalla puede causar que algunos controladores de gráficos se estabilicen. Si utiliza una placa base de doble procesador, asegúrese de seguir los mismos pasos para cada procesador.
4.
2. Software
Aunque Windows es el sistema operativo más popular en los ordenadores Intel, debido a vulnerabilidades y errores del propio Windows, el mal uso de las aplicaciones
será causante. que el sistema operativo se apague rápidamente (a veces el propio sistema operativo se apaga por razones inexplicables). Elegir un entorno de desarrollo de programas
más estable es la solución. Los siguientes pasos pueden ayudarle a prevenir algunas violaciones de acceso:
(1) Aunque Windows 9X es popular, Windows NT/. 2000 ha demostrado ser un entorno más estable en muchos sentidos, y casi todas las plataformas de código de Windows desarrolladas para Windows NT/2000 son más estables que Windows 9X.
(2) Asegúrese de instalar el último paquete de servicio para Windows NT/2000.
Descubrirá que cada nueva versión del paquete de servicio hará que su computadora sea más estable.
(3) Cargue las últimas actualizaciones o parches (BDE, ADO...) para las distintas versiones de Delphi que utilice. Esta es una buena forma de evitar errores por adelantado
. Intente utilizar los últimos parches de Delphi: la cantidad de errores de infracción de acceso se reducirá considerablemente, especialmente durante la fase de diseño.
(4) Si a menudo encuentra errores de infracción de acceso aleatoriamente en el IDE, lo más probable es que haya instalado el control o paquete de software incorrecto o
no esté apuntando al sistema que desea. están utilizando. Un asistente para escribir o compilar versiones de Delphi. 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 realizar un seguimiento del resultado de este 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 causan errores de "violació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 recibiendo mensajes de error como "Permiso de acceso violado"
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?
Cualquier desarrollo de software se encuentra con esta situación: escribes un programa, lo pruebas y luego lo envías, solo para que los usuarios te digan que el programa falló.
Puede considerar usar la pragma {$D} para compilar su programa: Delphi puede crear un archivo de imagen del código fuente para ayudar a encontrar errores de infracción de acceso. El cuadro de diálogo Opciones del proyecto (Proyecto|Opciones|Enlazador 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 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 del archivo ejecutable final ni la velocidad de ejecución. Los productos que incluyen información de depuración y opciones de archivos de imagen (Proyecto|Opciones|Enlazador) solo completarán la información de línea bajo el comando de compilación {$D+}
.
Las violaciones de los derechos de acceso generalmente se manifiestan en un solo aspecto del programa. Cuando surge un problema por primera vez, es importante considerar lo que hizo el usuario y luego buscar una salida. Desde la perspectiva del usuario, su programa interrumpe su trabajo y pedirle
que le cuente un problema parece disuadirlo de resolverlo. Sin embargo, comunicarse con los usuarios es la única forma eficaz
de identificar problemas y mejorar su programa.
Ahora podrá ver lo fácil que es descubrir la ruta exacta, el archivo de código fuente y la línea donde se produce el error de infracción de acceso
cuando solo se le proporciona la dirección en conflicto. :
"Buscar - Encontrar errores...". ".
Cuando se produce una infracción de acceso al tiempo de ejecución, sus usuarios recibirán un mensaje de error similar al siguiente:
En el módulo
Dirección< valor hexadecimal>
Infracción de acceso en la dirección
Infracción de acceso en el módulo
Lectura de la dirección
Si su programa fue compilado en Delphi IDE con información de depuración, puede encontrar la línea de código fuente que causó el error
El error de infracción de acceso ocurrió en el programa Delphi. La razón más común es usar un objeto que aún no se ha creado. Si
el valor hexadecimal de la segunda dirección es FFFFFFFF o 0000000, entonces con toda probabilidad estás accediendo a un objeto que aún no se ha creado. Por ejemplo
usted llamó a un evento en un formulario que no fue creado automáticamente ni instanciado por código con el procedimiento TfrMain.OnCreate(Sender: TObject);
var BadForm: Refresh;
end;
Supongamos que BadForm está en la lista de ventanas de la opción del proyecto "Formularios disponibles"; esta ventana debe crearse y liberarse manualmente como se describe anteriormente. Llamando a la actualización de la ventana BadForm. El método en su código 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:
.El mensaje indica que se ha producido un EAccessViolation es un error de acceso a memoria no válido
Esta es la clase de excepción que verá al diseñar su programa, aparecerá el siguiente cuadro de mensaje y luego el. el programa fallará:
Leyendo la dirección 000000 en el módulo 'Project1.exe'
Un número hexadecimal 0043F193 es la dirección del error de tiempo de ejecución en el código compilado (Project1.exe) donde se se produjo una infracción de acceso
En el entorno de desarrollo integrado, seleccione el elemento del menú "Buscar | Buscar errores...", 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 del proyecto y mostrará la línea de código donde ocurrió el error de tiempo de ejecución, es decir, la línea
BadForm.Refresh.
A continuación se enumeran las causas más comunes de errores de infracción de acceso en un entorno Delphi. Esta lista no cubre ni puede cubrir todas las
posibles violaciones de acceso. Publique su información sobre la infracción de acceso en el foro y podremos intentar resolver el problema juntos
; los ejemplos reales suelen ser mucho más oscuros que los errores enumerados.
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 han sido creados o no han sido liberados. Para evitar
que se produzcan tales violaciones de acceso, asegúrese de que todos los objetos a los que acceda se hayan creado primero. Por ejemplo, cuando la tabla está en un
módulo de datos no creado (eliminado de la ventana de generación automática), puede abrirla en el evento OnCreate del formulario
.
En el siguiente código, después de que se llama al evento en el objeto eliminado (b:TBitmap), se produce una infracción de acceso
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á un error de infracción de acceso p>
b.Canvas.TextOut(0,0,'Esto es una infracción de acceso');
end;