Советы по Delphi


Динамические массивы II - часть 2


/p>

Имейте в виду, что вам необходимо самому организовать контроль допустимого диапазона. Если вы распределили память для массива с пятью элементами, и пытаетесь назначить какое-либо значение шестому, вы получите ошибку и, возможно, порчу памяти.

Помните также о том, что после использования массива всю распределенную память необходимо освободить. Вот пример того, как избавиться от этого массива:

procedure DeallocateArray;beginP := AllocMem(ArraySizeIWant * SizeOf(LongInt));end;

Ниже приведен пример динамического массива:

unit Unit1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,Controls, Forms, Dialogs, StdCtrls;
typeElementType = Integer;
constMaxArraySize = (65520 div SizeOf(ElementType));{ в 16-битной среде }
type{ Создаем тип массива. Убедитесь в том, что вы установилимаксимальный диапазон, который вам, вероятно, может понадобиться. } TDynamicArray = array[1..MaxArraySize] of ElementType;TForm1 = class(TForm)Button1: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure FormDestroy(Sender: TObject);private{ Private declarations }public{ Public declarations }end;
varForm1: TForm1;{ Создаем переменную типа указатель на ваш тип массива. }P: ^TDynamicArray;
const{ Это типизированные константы. В действительности ониявляются статическими переменными, инициализирующимисяво время выполнения указанными в исходном коде значениями.Это означает, что вы можете использовать типизированныеконстанты точно также, как и любые другие переменные.Удобство заключается в автоматически инициализируемой величине. }DynamicArraySizeNeeded: Integer = 10;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);begin{ Распределяем память для нашего массива. Будь внимательныи распределяйте размер, в точности необходимый для размещения нового массива.Если вы попытаетесь записать элемент, выходящий за допустимый диапазон,компилятор не ругнется, но объект исключения вам обеспечен. }DynamicArraySizeNeeded := 500;P := AllocMem(DynamicArraySizeNeeded * SizeOf(Integer));{ Как присвоить значение пятому элементу массива. }P^[5] := 68;end;
procedure TForm1.Button1Click(Sender: TObject);begin{ Вывод данных. }Button1.Caption := IntToStr(P^[5]);end;
procedure TForm1.FormDestroy(Sender: TObject);begin{ Освобождаем распределенную для массива память. }FreeMem(P, DynamicArraySizeNeeded * SizeOf(Integer));end;
end.

[000362]




Начало  Назад  Вперед



Книжный магазин