Приклади роботи з динамічними масивами, delphisite

B ^ # 91; 3477 # 93; : = FALSE;

FreeMem # 40; B, N * sizeof # 40; boolean # 41; # 41; ;

FreeMem # 40; B # 41; ;

MaxArraySize = # 40; 65520 div SizeOf # 40; ElementType # 41; # 41; ;

(* В 16-бітної середовищі *)

MyArrayType = array # 91; 1. MaxArraySize # 93; of ElementType;

ArraySizeIWant: Integer = 1500;


Потім, для розподілу пам'яті під масив, ви могли б використовуватися наступну процедуру:

if ArraySizeIWant <= MaxArraySize then

P: = AllocMem # 40; ArraySizeIWant * SizeOf # 40; LongInt # 41; # 41; ;


Не забувайте про те, що величина ArraySizeIWant повинна бути менше або дорівнює MaxArraySize.
Ось процедура, яка за допомогою циклу встановлює величину кожного члена:

for I: = 1 to ArraySizeIWant do


Майте на увазі, що вам необхідно самому організувати контроль допустимого діапазону. Якщо ви розподілили пам'ять для масиву з п'ятьма елементами, і намагаєтеся призначити будь-яке значення шостому, ви отримаєте помилку і, можливо, псування пам'яті.
Пам'ятайте також про те, що після використання масиву всю розподілену пам'ять необхідно звільнити. Ось приклад того, як позбавитися від цього масиву:

P: = AllocMem # 40; ArraySizeIWant * SizeOf # 40; LongInt # 41; # 41; ;


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

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

MaxArraySize = # 40; 65520 div SizeOf # 40; ElementType # 41; # 41; ;

максимальний діапазон, який вам, ймовірно, може знадобитися.>

TDynamicArray = array # 91; 1. MaxArraySize # 93; of ElementType;

TForm1 = class # 40; TForm # 41;

procedure FormCreate # 40; Sender: TObject # 41; ;

procedure Button1Click # 40; Sender: TObject # 41; ;

procedure FormDestroy # 40; Sender: TObject # 41; ;

є статичними змінними, не започатковано

під час виконання зазначеними в вихідному коді значеннями.

Це означає, що ви можете використовувати типізовані

константи точно також, як і будь-які інші змінні.

Зручність полягає в автоматично ініціалізіруемих величиною.>

DynamicArraySizeNeeded: Integer = 10;

procedure TForm1. FormCreate # 40; Sender: TObject # 41; ;

і розподіляйте розмір, в точності необхідний для розміщення нового масиву.

Якщо ви спробуєте записати елемент, що виходить за допустимий діапазон,

компілятор ругнется, але об'єкт виключення вам забезпечений.>

P: = AllocMem # 40; DynamicArraySizeNeeded * SizeOf # 40; Integer # 41; # 41; ;

procedure TForm1. Button1Click # 40; Sender: TObject # 41; ;

Button1. Caption: = IntToStr # 40; P ^ # 91; 5 # 93; # 41; ;

procedure TForm1. FormDestroy # 40; Sender: TObject # 41; ;

FreeMem # 40; P, DynamicArraySizeNeeded * SizeOf # 40; Integer # 41; # 41; ;

Ось "демо-модуль", що демонструє три різні способи (далеко не всі) створення динамічних масивів. Всі три способи для розподілу достатньої кількості пам'яті з купи використовують GetMem, tList використовують для додавання елементів в список масиву і використовують tMemoryStream для того, щоб розподілити достатньо пам'яті з купи і мати до неї доступ, використовуючи потік. Старий добрий GetMem цілком підходить для такого завдання за умови, що масив не дуже великий (

Схожі статті