Red de conocimiento informático - Problemas con los teléfonos móviles - ¡BOLSILLO.EXE!

¡BOLSILLO.EXE!

Reinstale e inténtelo de nuevo

Las infracciones de acceso, fallas de protección general o fallas de páginas no válidas generalmente son causadas por el mismo tipo de error, aunque existen diferentes cuentas. 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> Una vez que Windows quiere escribir datos e información fuera de su área de almacenamiento asignada, no puede hacerlo. Una vez que esto sucede, el sistema operativo falla o se apaga de alguna forma y debe reiniciar su computadora. Por ejemplo, cuando un programa en Windows NT/2000 encontraba este error, aparecía Dr. Watson, detenía el programa, capturaba rápidamente algunos detalles del estado y luego los registraba en forma de texto. Las violaciones de acceso son uno de los errores más molestos que encuentran algunos programas de Windows. Este artículo tiene como objetivo encontrarle la solución para la infracción de acceso en Delphi. Primero, la infracción de acceso no tiene nada que ver con Microsoft Access.

Al desarrollar programas en Delphi, podemos dividir las infracciones de acceso en dos categorías: tiempo de ejecución y tiempo de diseño.

Infracción de acceso en la etapa de diseño

1. Motivos de hardware

La infracción de acceso en la etapa de diseño es propensa a ocurrir al iniciar o cerrar el IDE de Delphi y al compilar un proyecto Delphi. Hay muchas razones para esto, incluido el BIOS del sistema, el sistema operativo o la línea de controladores de hardware. Ciertas tarjetas de sonido, tarjetas gráficas y tarjetas de red también pueden causar este error. ¿Por qué sucede esto? Cada tarjeta de su computadora tiene su propio controlador de dispositivo. Diferentes fabricantes, diferentes versiones de Windows o diferentes versiones de Delphi pueden experimentar diferentes problemas. Los siguientes pasos pueden ayudarle a resolver estos problemas:

1. Siga los pasos necesarios para verificar si existen conflictos entre los controladores que instaló.

2. A veces, reducir la resolución de la pantalla puede estabilizar algunos controladores de gráficos extraños.

3. Si utilizas una placa base con doble procesador, asegúrate de seguir los mismos pasos para cada procesador.

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 vulnerabilidades y errores del propio Windows, el mal uso de las aplicaciones puede provocar que el sistema operativo falle rápidamente. Falla el tiempo de inactividad (a veces el propio sistema operativo se cuelga sin motivo aparente). 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. Descubrirá que cada nueva versión del paquete de servicio hará que su computadora sea más estable.

(3) Cargue las actualizaciones o parches actuales para las distintas versiones de Delphi que esté utilizando (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 el 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, 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 | Vinculador 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, comunicarse 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 en el módulo Infracció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 sutil que el error enumerado.

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 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;