Ver Mensaje Individual
  #1  
Antiguo 26-08-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Reputación: 21
jplj Va por buen camino
Matrices dinámicas

La Guía del Lenguaje Object Pascal de Borland para Delphi 5 dice acerca de las matrices dinámicas (no obstante estoy trabajando con Delphi 7):
"Para crear una matriz en memoria, es necesario llamar a SetLength. ...

Para liberar la memoria asignada una matriz dinámica, basta tomar una variable que haga referencia a la matriz y asignarle el valor nil o pasarla a Finalize; ... "
Mi pregunta es si en el caso de llamar a SetLength para una matriz que ya tuviera asigana memoria, no libera primero la memoria asignada.

Es decir, el siguiente código -que funciona- ¿es correcto?:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Matriz: array of Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   SetLength(Matriz, 5);
   (Sender as TButton).Caption:= IntToStr(High(Matriz));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   SetLength(Matriz, 10);
   (Sender as TButton).Caption:= IntToStr(High(Matriz));
end;

o bien debería ser así:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Matriz: array of Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

   Matriz:= nil;

   SetLength(Matriz, 5);
   (Sender as TButton).Caption:= IntToStr(High(Matriz));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

   Matriz:= nil;

   SetLength(Matriz, 10);
   (Sender as TButton).Caption:= IntToStr(High(Matriz));
end;
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita