PDA

Ver la Versión Completa : Liberar Memoria


JODELSA
13-05-2003, 16:36:36
Hola a todos:

Mi problema radica en que:
tengo una aplicacion y creo los formularios al momento de mostrarlo, y lo destruyo en el evento onclose del mismo;
lo hago de la siguiente manera:

cuando ejecuto una opcion del menú que me llama el formulario "form1" hago estos:

Application.CreateForm(TForm1, Form1);
Form1.showmodal;


y en el evento 'onshow' del form1, escribo lo siguiente:
form1.free

tambien lo he hecho:
form1.destroy

me produce un mensage que dice:

project siscomp.exe raised exceptin class EaccessViolation with 'Access violation at address 00000009.White of addres 704B2CF9'. Process stopped. Use Step or Run to Continue.

siscomp es el nombre de mi projecto,

marcoszorrilla
13-05-2003, 16:47:03
Si form1 lo llamas y creas desde el menú, form1.free, tendrías que colocarlo en el evento OnClose de Form1, también bastaría con escribir:
Action:=CaFree;

Un Saludo.

jhonny
13-05-2003, 16:53:52
Intenta crear la forma de la siguiente manera:

1. Si "Form1" no es tu forma principal, Debes de quitarla de las "formas autocreadas", presionando Shift-Ctrl-F11 y luego click en la pestaña "Forms", Y pasandola de "Auto-create forms" a "Available forms".

2. Para crearla agrega el nombre de la unidad de "Form1" en el Uses de la otra unidad que llamara a "Form1".

Supongo que es "Unit1".

3. Puede ser en un boton algo asi:

Form1:=TForm1.Create(self);
Form1.ShowModal;
Form1.Free;


4. El Form1.free no lo hagas en el evento onShow de "Form1", Debes hacerlo en el evento OnClose...

Y deberia de ser asi:
Action:=Cafree;
para devolver toda la memoria utilizada.

Espero te sirva de guia ;)

//Caramba, mientras escribia Marcoszorrilla, ya te habia contesta :cool:

guillotmarc
13-05-2003, 16:56:09
Hola.

Además no es necesario referenciar la variable Form1 (si no pones ninguna referencia, se aplicará a la instancia actual del formulario). Simplemente pón : Free o Self.Free.
(Sospecho que el problema lo tienes en la variable que referencia al formulario)

NOTA: Yo prefiero utilizar el método Release en lugar de Free, aunque tengo que reconocer que desconozco las diferencias exactas entre los dos métodos. El que te desaconsejo es la utilización de Destroy.

Saludos..

roman
13-05-2003, 17:39:05
Posteado originalmente por guillotmarc

NOTA: Yo prefiero utilizar el método Release en lugar de Free, aunque tengo que reconocer que desconozco las diferencias exactas entre los dos métodos. El que te desaconsejo es la utilización de Destroy.

De hecho en la ayuda de Delphi se indica que se debe usar Release cuando se destruye una forma desde alguno de sus eventos. La razón parece lógica: Para el momento en que se desea liberar la forma, es posible que aún existan mensajes en la cola de mensajes de la forma esperando ser procesados. Release se encarga de no liberar la forma sino hasta que todos los mensajes han sido procesados.

// Saludos