Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema al cerrar programa con matriz de objetos. (https://www.clubdelphi.com/foros/showthread.php?t=33248)

metalfox6383 30-06-2006 20:54:41

Problema al cerrar programa con matriz de objetos.
 
Hola:

He creado un programa que hace una matriz de objetos del tipo TLabel. Creo los objetos y los distribuyo en el formulario. Pero cuando ejecuto mi formulario, al querer intentarlo (es decir, cerrar mi programa) me sale siempre un error que dice: 'Invalid Pointer operation'.

¿A qué se refiere? ¿Cómo soluciono el problema?

Gracias.

roman 30-06-2006 21:03:17

¿Puedes poner un fragmento de cómo los creas y cómo los destruyes?

// Saludos

metalfox6383 30-06-2006 21:11:14

Ok.

Tfm_Principal = class(TForm)
procedure FormCreate(Sender: TObject);
private
//declaro la matriz.
mt_NumeroA: array of TLabel;
public
{ Public declarations }
end;

var
fm_Principal: Tfm_Principal;

implementation
{$R *.dfm}

procedure Tfm_Principal.FormCreate(Sender: TObject);
var conteo: byte;
begin
//creo los objetos.
setlength(mt_NumeroA,7);
for conteo:=0 to 7 do begin
mt_NumeroA[conteo]:= TLabel.Create(nil);
mt_NumeroA[conteo].Parent:=fm_Principal;
mt_NumeroA[conteo].Caption:=inttostr(conteo);
mt_NumeroA[conteo].Left:=5;
mt_NumeroA[conteo].Top:=15+15*conteo;
end;
end;
end.

No sé cómo debo destruirlos. He destruido otros objetos, pero nunca intenté con matrices.

roman 30-06-2006 21:18:16

A bote pronto veo un error: creas un arreglo de 7 elementos pero asignas 8 (0..7).

Ahora, todos esos objetos tienes que destruirlos o poco a poco perderás memoria. Puedes, al término del programa (evento OnDestroy del formulario) recorrer con un ciclo el arreglo aplicando el método Free de cada objeto. O bien puedes construir los objetos con

Código Delphi [-]
mt_NumeroA[conteo]:= TLabel.Create(Self);

De esta manera estás indicando que Self (el formulario en este caso) es el "dueño" del objeto creado. Los dueños se encargan en automático de destruir a sus componentes.

// Saludos

metalfox6383 30-06-2006 21:21:51

¡Funcionó! ¡Ya no sale el error! Gracias por tu ayuda, estaba creando 8 objetos, pero mi variable tenía una longitud de 7.

Gracias una vez más.

Saludos.


La franja horaria es GMT +2. Ahora son las 20:26:40.

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