Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Error al salir

Al salir de la aplicacion me dice

Código:
Exception Eacces violation in module programa.exe at 000CC7E4.
Acces violation at adress 00CC7E4 in module programa.exe.
Read of adress 00C46AF4
Cual es el problema??

¿¿Como puedo averigar donde esta el error?


Gracias
Responder Con Cita
  #2  
Antiguo 27-04-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 27-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 27-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
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)
Responder Con Cita
  #5  
Antiguo 27-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
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
begin

     try
         selbas.ShowModal;
      finally
      FreeAndNil(selbas);
    end;


end
else
begin
Confgen.tablename:='confgen.dbf';
end;
Si elimino la comparacion si que funciona, pero si cambio por esto...

Código:
if FileExists('Confgen2.dbf') then
begin
Confgen.tablename:='confgen2.dbf';

end
else
begin
Confgen.tablename:='confgen.dbf';
end;
Tambien me da error.

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.
Responder Con Cita
  #6  
Antiguo 27-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 27-04-2004
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 27-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Revísate también el DPR del proyecto, no sea que hagas algo allí con objetos que tengas ya destruidos
Responder Con Cita
  #9  
Antiguo 28-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Cita:
Empezado por jachguate
Estas llamando al método free de algun objeto dentro de tu código??
En todos los formularios que creo, cuando los cierro en el evento onclose llevan esto

Código:
Action := caFree;
Selbas:= nil; (Nombre del form)
Cita:
Empezado por jachguate
Que es selbas?? porque llamas a freeandnil?? cómo lo has creado?
Selbas es un formulario normal y corriente que se crea y lleva 2 radio buttons y un button para seleccionar la base de datos que quieran.

----------------------------------------------------------

x Cadetill

Código:
Application.Initialize;
        if FileExists('Confgen.dbf') then
        begin
          Application.CreateForm(TForm1, Form1);
          Application.CreateForm(TDataModule1, DataModule1);
        end
        else
        begin
          Application.CreateForm(TConfig, Config);
          config.show;
        end;
Application.Run;
end.
El DPR del proyecto no lleva nada mas..

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
Responder Con Cita
  #10  
Antiguo 28-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Si en cada from haces en el OnClose
Cita:
Empezado por cisterpe
Código Delphi [-]
Action := caFree;
Selbas:= nil; (Nombre del form)
y por otro lado a la que sale de la pantalla haces
Cita:
Empezado por cisterpe
Código Delphi [-]
try
  selbas.ShowModal;
finally
  FreeAndNil(selbas);
end;
Es normal que te de el AccessViolation, ya que intentas llamar a la función Free de un objeto que ya no tienes (le has asignado nil con anterioridad)
Responder Con Cita
  #11  
Antiguo 28-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
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);
begin
DataModule1.destroy;
end;

end.
Y ya no me da el error.

No se que he tocado mas pq he tocado muchas cosas.
Responder Con Cita
  #12  
Antiguo 28-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #13  
Antiguo 28-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 28-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #15  
Antiguo 28-04-2004
cisterpe cisterpe is offline
Miembro
 
Registrado: sep 2003
Posts: 75
Poder: 21
cisterpe Va por buen camino
Hombre el programa tiene bastante para ser el primero, y nunca habia tenido este problema.

Seguire tus indicaciones.


Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:24:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi