![]() |
Error al salir
Al salir de la aplicacion me dice
Código:
Exception Eacces violation in module programa.exe at 000CC7E4. ¿¿Como puedo averigar donde esta el error? Gracias |
Lo mismo que entiendes tu en ese código es lo mismo que entiendo yo :(
En principio, está accediendo a una zona de memoria que no debería acceder. Si tienes código en el FormClose o CloseQuery, pon un BreakPoint al inicio de ambas y pulsa F8 para ver en que línea da el error. Saludos. |
No se como explicarme donde podria estar el error.
Probe lo del breakpoint y el error me aparece ya despues de haber cerrado el programa. O sea despues de pasar por el "end." del "form1" Por eso preguntaba si existe alguna manera de poder averiguar donde esta el error con lo que te presenta en pantalla el programa. Cuando ejecuto el programa en Windows (sin delphi) me aparece un tipico eror de "Programa.exe ha efectuado una operacion no valida y se cerrara". Cuando le doy a cerrar a esta ventana me aparece la otra que puse anteriormente, con la posibilidad de Aceptar, y aparentemente despues de aceptar no ocurre nada. Puedo volver a ejecutar la aplicacion sin problema alguno. Si ejecuto bajo Delphi solo me aparece la ultima ventana |
Añado el event LOG a ver si sirve de algo...
Module Load: SensApi.dll. No Debug Info. Base Address: $60000000. Process Gesnot.exe ($F14EBE9F) <------------Final Carga Programa-------------------> Cierro Aplicacion <------------ ERROR -------------------------------> (Aceptar) Module Unload: OLEPRO32.DLL. Process Gesnot.exe ($F14EBE9F) Module Unload: idr20009.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: iddbas32.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: bantam.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: idapi32.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: gds32.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: RNR20.dll. Process Gesnot.exe ($F14EBE9F) Module Unload: MSAFD.dll. Process Gesnot.exe ($F14EBE9F) |
Mas Datos...
Al conectar a la base de datos compruebo si existe un fichero llamado Confgen2.dbf para que elija la base de datos. Código:
if FileExists('Confgen2.dbf') then Código:
if FileExists('Confgen2.dbf') then Pense que el error podia estar en Confgen2.dbf, pero cuando me sale la pantalla para seleccionar (SelBas) si selecciono confgen.dbf tambien al salir me da error. |
Hola.
Todo parece indicar que hay un mal manejo de la destrucción de algun o algunos objetos... Estas llamando al método free de algun objeto dentro de tu código?? Si lo haces, en que circunstancias lo llamas?? cómo se ha creado el objeto? Mostrá un trozo de código. Que es selbas?? porque llamas a freeandnil?? cómo lo has creado? Hasta luego. ;) |
Hola.
A mi me sucedia un error igual, cuando realizaba algunas operaciones y posteriormente eliminaba un form; al parecer las operaciones o el acceso algun dato de algun control no era inmediato, por lo que al llevarse a cabo la eliminación del form, ya no podia accesarlo y eso llevaba al error. Una de esas operaciones que me generaba el error era la eliminación de algunos controles creados por codigo. Espero te sirva de referencia. |
Revísate también el DPR del proyecto, no sea que hagas algo allí con objetos que tengas ya destruidos
|
Cita:
Código:
Action := caFree; Cita:
---------------------------------------------------------- x Cadetill Código:
Application.Initialize; No se seguire mirando, pero no entiendo nada, en principio me da el error ahora ya casi siempre incluso en los casos que no me daba error antes, podria ser problema del ordenador donde estoy compilando?? Gracias a todos por la ayuda, a ver si a alguien se le enciene la bombilla da con el problema :( |
Si en cada from haces en el OnClose
Cita:
Cita:
|
Tengo en todos los Forms y nunca me habia dado problemas...
y en ese caso me daria error cada vez que cierro un form no?? De todas formas he hecho esto, y no se si esta bien del todo... En el Form1 en el evento ONCLOSE Pongo lo siguiente Código:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); No se que he tocado mas pq he tocado muchas cosas. :rolleyes: |
Además de lo ya explicado por cadetill... te recomiendo no llamar directamente al método (destructor) Destroy de ningun componente. No veo porque destruyes el DataModule1 alli... si form1 es el form principal, y Application es el owner de DataModule1, eso también provocará un fallo, pues un instante después, Application tratará de destruirlo de nuevo.
En conclusión, quitá la llamada a Destroy. Por otro lado, si realmente te corresponde a vos destruir el DataModule, mejor usá su método Free, que llamará a Destroy. Es una recomendación de los diseñadores de la VCL que yo me he acostumbrado a seguir. Hasta luego. ;) |
Gracias por la aclaracion, con Datamodule1.free tampoco me da el error asi que si es una recomendacion tambien la utilizare.
No puedo evitar el destruir y no entiendo pq ya que si lo quito me da el dichoso error. Muchas gracias |
Pues lo único que me queda es recomendarte, en primer lugar, que investigues un poco sobre el tema del owner y la destrucción automática de objetos por parte de este. Luego de haber comprendido como funciona el asunto, que revises minuciosamente tu código, para evitar que el programa sea una caja de pandora que ande dando violaciones de acceso a memoria por alli.
Hasta luego. ;) |
Hombre el programa tiene bastante para ser el primero, y nunca habia tenido este problema.
Seguire tus indicaciones. Gracias |
La franja horaria es GMT +2. Ahora son las 21:51:01. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi