Példák munka dinamikus tömböket, delphisite
B ^ # 91; 3477 # 93; : = FALSE;
FreeMem # 40; B, N * sizeof # 40; logikai # 41; # 41; ;
FreeMem # 40; B # 41; ;
MaxArraySize = # 40; 65520 div sizeof # 40; ElementType # 41; # 41; ;
(* 16-bites környezetben *)
MyArrayType = array # 91; 1. MaxArraySize # 93; A ElementType;
ArraySizeIWant: Egész 1500;
Ezután a memóriát a tömb, akkor használja a következő eljárást:
ha ArraySizeIWant <= MaxArraySize then
P: = AllocMem # 40; ArraySizeIWant * sizeof # 40; LongInt # 41; # 41; ;
Ne felejtsük el, hogy ArraySizeIWant értéket kell kisebb vagy egyenlő MaxArraySize.
Itt az az eljárás, amely segítségével egy hurok értéket állítja be az egyes tagok:
I: = 1-től ArraySizeIWant csinálni
Ne feledje, hogy meg kell szervezni a szabályozási tartomány. Ha memóriát kiosztani tömb öt elem, és próbálja értéket rendelni a hatodik, hibaüzenetet kap, és esetleg kárt okozhat a memóriában.
Emlékezzünk arra is, hogy használata után a tömb összes memóriát kell szabadítani. Íme egy példa arra, hogyan lehet megszabadulni e tömböt:
P: = AllocMem # 40; ArraySizeIWant * sizeof # 40; LongInt # 41; # 41; ;
Az alábbiakban egy példa egy dinamikus tömböt:
SysUtils, WinTypes, WinProcs, Üzenetek, osztályok, grafika,
Controls, Forms, Dialogs, StdCtrls;
MaxArraySize = # 40; 65520 div sizeof # 40; ElementType # 41; # 41; ;
A maximális hatótávolság, hogy akkor valószínűleg szükség.>
TDynamicArray = array # 91; 1. MaxArraySize # 93; A ElementType;
TForm1 = osztály # 40; TForm # 41;
eljárás FormCreate # 40; Sender: TObject # 41; ;
eljárás Button1Click # 40; Sender: TObject # 41; ;
eljárás FormDestroy # 40; Sender: TObject # 41; ;
a statikus változók kezdeti
A kivitelezés során a megadott értékek a forráskódot.
Ez azt jelenti, hogy tudod használni gépelt
állandók, mint bármely más változókat.
Kényelem automatikusan inicializálni értéket.>
DynamicArraySizeNeeded: Egész = 10;
eljárás TForm1. FormCreate # 40; Sender: TObject # 41; ;
és forgalmaz méret, csak szükség, hogy helyet biztosítsanak az új tömb.
Ha megpróbálja, hogy írjon egy elem, amely túlmutat a megengedett tartományon,
A fordító nem rugnetsya, hanem a kivétel objektum biztosítja Önnek.>
P: = AllocMem # 40; DynamicArraySizeNeeded * sizeof # 40; egész szám # 41; # 41; ;
eljárás TForm1. Button1Click # 40; Sender: TObject # 41; ;
Button1. Caption: = IntToStr # 40; P ^ # 91; 5 # 93; # 41; ;
eljárás TForm1. FormDestroy # 40; Sender: TObject # 41; ;
FreeMem # 40; P, DynamicArraySizeNeeded * sizeof # 40; egész szám # 41; # 41; ;
Itt az „demo egység”, mutatja három különböző módon (nem az összes), hogy dinamikus tömböket. Mindhárom módszer eloszlása elegendő mennyiségű memóriát a kupac használt GetMem, tList használt elemeket hozzáadni a listához, és a tömb tMemoryStream használt elegendő memóriát a kupac, és hozzáférhet az áramot. A jó öreg GetMem alkalmasak erre a feladatra, feltéve, hogy a tömb nem túl nagy (