PDA

Ver la Versión Completa : Error rarísimo en Delphi 7


axelbb
28-04-2005, 19:54:15
Saludos a todos, soy medio nuevo en el tema, y tengo un problema con un error que espero no sea de Delphi. Tengo una ventana MDIForm, abre una MDIChild y ésta llama a otra MDIChild. En esta última inserté:

3 Panel
10 Label
1 MaskEdit
4 Edit
2 ComboBox
2 Bit Button
1 Memo.

La aplicación corre, y abro las dos ventanas. AL CERRAR esta última, sale un error que dice algo como

...exception class EAccessViolation with message 'Access violation at address 004767BA in module ....exe. Read of address 0125C22B....

Le saco UN componente como un ComboBox...¡¡y anda sin problemas!!.:confused: Obviamente, necesito ese ComboBox... No puedo creer que se agote la memoria o algo parecido, solamente corro como aplicación a Delphi, más algunos residentes "normales", y tengo 256 de RAM.

¿¿¿Qué estoy haciendo mal??? Quiero aprender :rolleyes: . Gracias...

axelbb
28-04-2005, 20:41:02
Luego de escribir lo anterior, se me ocurrió llevar el .exe que daba el error en mi máquina a otra PC. Allí, desde luego, funciona a la perfección ¿¿¿??? El error se produce luego de hacer el

Form3.Free;

Si pongo un showmessage() antes y después de esa línea, ambos se ejecutan sin problemas. Al aceptar el segundo showmessage... ¡pum!, como si buscara algo en la memoria que ya no está más. ¿Qué puede ser?. La ventana se creó al momento de llamarla, y se la activó con Form3.Show, por lo que la rutina del Form2 se ejecutó completa, no quedó esperando como si hubiera hecho un Form3.ShowModal. O sea, Form2 no ejecuta nada (al menos desde mi código) luego de destruírse Form3..., salvo ponerse al frente.

El punto es ese: al cerrarse dá un error, que no se produce si saco UNO CUALQUIERA de los componentes que tiene dentro el Form. Además, la misma versión exe que dá error en mi PC, en otra no lo dá...

Un misterio, al menos para mí...:mad:

Mick
28-04-2005, 21:28:20
Al cerrar el form principal de cualquier programa en delphi, el sistema considera que la aplicacion debe finalizarse, de modo que el propio delphi se encarga de destruir todos los forms, y todos los objetos que haya dentro de los forms.

Seguramente cuando intentas destruir alguno de los forms o algun otro objeto manualmente, ese form u objeto ya haya sido previamente destruido por el propio delphi. De ahi que de el error, al intentar destruir algo que ya no existe.

Ahora si, sin ver el codigo fuente no se puede saber exactamente en que punto exacto esta el error. Pero seguro que es un problema de este tipo ya que errores de ese tipo son bastante comunes.

Saludos

axelbb
29-04-2005, 16:06:38
Gracias por contestar, pero nunca intenté cerrar la ventana de la aplicación. El error se producía al cerrar el último MDIChild abierto. Finalmente, lo resolví de otra manera, ya que en el primer form que abría había un componente tipo DataSet que bajé de la Web (Mediator) para un caso especial (controlador de archivos .ntx, ya que la aplicación debe conectar con una parte de otra aplicación realizada en Clipper :o ). Parece que tal controlador no es gran cosa :rolleyes: , porque tiene algunos bugs por ahí, si bien me están ayudando mucho. Quité los componentes del primer form, creé un DataModule (no es mi costumbre usarlo :D ) y puse todo lo que necesitaba ahí adentro. Santo remedio.

Gracias por la información de que Delphi limpia toda la memoria que usó en la aplicación, me quedaba la duda acerca de ese punto :) .