PDA

Ver la Versión Completa : Problema al cerrar programa con matriz de objetos.


metalfox6383
30-06-2006, 20:54:41
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


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.