Процедури за работа с динамични променливи - Статии
Днес: -0 -0 -0
Онлайн сега: На уебсайта -17 В IRC канала -2
Процедури за работа с динамични променливи.
Основните процедури за работа с динамични променливи са показани в следващата таблица.
Изхвърлете | Освобождава памет от динамична променлива. |
Финализиране | Деинициализира динамична променлива. |
FreeMem | Освобождава памет от динамична променлива. |
GetMem | Създава динамична променлива, заделяйки определеното количество памет за нея. |
Инициализиране | Инициализира динамична променлива. |
Ново | Създава динамична променлива. |
ReallocMem | Преразпределя памет за динамична променлива. |
ПроцедураИзхвърляне ( var P: показалец);
Описание : Процедурата освобождава областта на паметта, използвана от динамичната променлива P. Стойността на указателя P в този случай става недефинирана. Ако към функцията бъде подаден невалиден указател, се хвърля изключение EInvalidPointer. Обработката на грешки с помощта на механизма за обработка на изключения е активирана от директивата на компилатора.
ПроцедураFinalize (var V [; Count: Integer]);
Описание : Процедурата деинициализира динамичната променлива, посочена в параметъра V. Тази процедура трябва да се използва само в случаите, когато процедуратаDispose не се използва за освобождаване на памет от под динамичната променлива. За обекти на глобални, локални и динамични променливи, когато освобождавате памет с помощта на стандартната процедураDispose,компилаторът генерира код, който прекратява дълги низове, Variant променливи и интерфейси, след като променливата бъде унищожена. Ако паметта, съдържаща непразни или неинициализирани дълги низове, Variant променливи или интерфейси, е освободена чрез процедура, различна отDispose (например процедураFreeMem ), тогава процедуратаFinalize трябва да бъде извикана преди паметта да бъде освободена, за да се затвори посочената променлива. ПроцедуратаFinalize присвоява празна стойност на всички дълги низове и деинициализира Variant променливи и интерфейси (задава типа Unassigned). Допълнителен параметър Count може да бъде зададен в случаите, когато е необходимо да се освободи памет от няколко променливи, съдържащи се в непрекъснат блок памет (например динамично разпределен масив от низове), за да се затворят всички променливи в една операция. Ако променливата, дефинирана в параметъра V, не съдържа дълги низове, стойности на Variant и интерфейси, тогава компилаторът просто игнорира извикването на процедурата.
ПроцедураFreeMem (var P: Указател [; Размер: Цяло число]);
Описание: Процедурата унищожава променливата, свързана с указателя P, и освобождава паметта, заета от тази променлива. Незадължителният параметър Size указва количеството памет в байтове, предварително динамично разпределено за променливата. Ако след действието на процедуратаFreeMem извикате указателя P, тогава ще възникне грешка, т.к. указателят е нула.
Пример:var Vf:File ; Размер: Цяло число; Буфер: PChar;begin AssignFile(Vf, 'work.txt'); Нулиране (Vf, 1); Размер:= FileSize(Vf); GetMem(буфер, размер);опитайте BlockRead(Vf ,Buffer^, Size);. < Това място трябва да бъдекод с помощта на буфер >.накрая Финализиране (буфер); FreeMem(буфер);край; Затваряне на файл(F);край;
ПроцедураGetMem (var P: Указател; Размер: Цяло число);
Описание: Процедурата създава динамична променлива: тя разпределя блок памет от Size байтове за променливата, указана в параметъра P, и връща указател към началото на този блок памет. Параметърът P може да бъде произволен тип указател. Указателят към новосъздадената променлива се записва като P^. Ако няма достатъчно памет за създаване на динамична променлива, се хвърля изключение EOutOfMemory.
ПроцедураInitialize (var V [ ; Count: Integer] );
ПроцедураНова (вар P: Указател);
Описание: Процедурата създава нова динамична променлива и свързва с нея указател P. Параметърът P може да бъде произволен тип указател. Количеството памет, разпределено за променлива, зависи от типа на указателя. Новосъздадената променлива може да се извика като P^. Ако няма достатъчно памет за създаване на динамична променлива, се хвърля изключение EOutOfMemory. След завършване на използването на динамична променлива, паметта, разпределена по-рано от процедуратаNew, трябва да бъде освободена чрез извикване на процедуратаDispose.
ПроцедураReallocMem (var P: Указател; Размер: Цяло число);
Описание : Процедурата преразпределя памет от Size байтове към динамичната променлива P. Когато се извика тази процедура, указателят P трябва да има стойностnil или трябва да сочи към динамична променлива, паметта за която е била предварително разпределена с помощта на процедуритеGetMem илиReallocMem. Ако P =nil, Size = 0, тогава процедурата не прави нищо. Ако P =нула,и размер <> 0, тогава процедурата разпределя нов блок памет с размер Size и задава показалеца P в началото на блока. Такова извикване на процедура е подобно на извикването на процедуратаGetMem. Ако P <>nil и Size = 0, тогава процедурата освобождава блока памет, посочен от P, и задава P =nil. Извикването на процедурата с посочените параметри е подобно на извикването на процедуратаFreeMem, но за разлика отFreeMem, процедуратаReallocMem изчиства указателя.
За да вмъкнете връзка към тази статия на друг сайт, използвайте следния HTML код:
Линк за форуми (BBCode):