¿Cómo solucionar el problema de infracción de acceso en la dirección 009B1DBF en el módulo pagrst.dll. Lectura de la dirección 9090909090 durante el inicio?
El error de infracción de acceso, el fallo de protección general o el fallo de página no válida tienen diferentes soluciones, pero básicamente son causados por el mismo tipo de errores. Las violaciones 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 lt; valor hexadecimal;
en el módulo lt; nombre de la aplicación
Lectura de la dirección lt; p>Los usuarios de Windows 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, es más probable que encuentre este error que otros usuarios
Una vez que Windows necesita escribir información de datos fuera de su espacio de almacenamiento asignado, sobrescribirá otros programas o incluso los comandos o datos del sistema operativo. Una vez que esto suceda, el sistema operativo fallará o se apagará de alguna manera y tendrá que reiniciar la computadora, por ejemplo, cuando se produzca este error. , Dr. Watson detendrá el programa, capturará rápidamente algunos detalles de estado y luego lo registrará en forma de texto. La violación de acceso es uno de los errores más molestos que encuentran los programas de Windows. Este artículo está diseñado para ayudarlo a encontrar la solución. Infracción. En primer lugar, la infracción de acceso no tiene nada que ver con Microsoft Access.
Cuando utilizamos Delphi para desarrollar programas, podemos dividir las infracciones de Access en dos categorías: infracciones en tiempo de ejecución y violaciones en tiempo de diseño. /p>
p>
I. Infracción de acceso en tiempo de diseño
1. Motivos de hardware
Es probable que este error ocurra al iniciar o cerrar Delphi IDE y compilar un proyecto Delphi Hay muchas razones, 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. su propio controlador 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 su instalación. ¿Hay conflictos entre los controladores?
2. A veces, reducir la resolución de la pantalla puede estabilizar algunos controladores de gráficos extraños.
3. mismos pasos para cada procesador
4. Tenga cuidado de utilizar los controladores más recientes para todo el hardware de su computadora
2 Software
Aunque Windows es el más común. sistema operativo utilizado para computadoras Intel, debido a vulnerabilidades y errores en el propio Windows, el mal funcionamiento de las aplicaciones puede hacer que el sistema operativo se apague rápidamente (a veces el propio sistema operativo se apaga inexplicablemente).
Elegir un entorno más estable para el desarrollo de programas es la solución. Los siguientes pasos pueden ayudarle a evitar que se produzcan ciertas violaciones de acceso:
(1) A pesar de la popularidad de Windows 9X, resulta que Windows NT /2000. es un entorno más estable en muchos sentidos y es válido 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 el control, paquete de software o asistente incorrectos, y estos controles, paquetes de software o asistentes no están Escrito o 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?
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 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 utilizarán la información de la línea de finalización del comando de compilación {$D}.
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 un problema parece hacer que retrase 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:
Acceso a la dirección
Leer 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 causa este error.
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;