Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамические массивы


7Up ©   (2002-09-09 14:22:00) 

Привет, мастера!

Нужно ли после работы с динамическим массивом освобождать его?

Я пишу библиотечные функции вида
procedure dosome (var a:array of Ansistring);
begin
Setlength (a,0);
.......
{цикл}
.......
SetLength (a,Length(a)+1);
.......
{конец цикла}
end;

При использовании этих функций по закрытии формы возникает ошибка 204 (неправильная операция с указателем).


Anatoly Podgoretsky   (2002-09-09 15:01:00) [1]

Не нкжно, это объект с фиксированным временем существования, но если бущешь очищать, то ничего плохого не произойдет


Alx2   (2002-09-09 14:40:00) [2]

>Нужно ли после работы с динамическим массивом освобождать его?

Массив сам умрет, как только кончится зона его жизни. Компилятор генерирует для этого специальный код. Так, массивы объявленные как локальные переменные, сами умирают при выходе из процедуры или функции, где они объявлены. При этом освобождается занимаемая ими память (аналогия с типом String). Другое дело, когда массив вынуждены прибить вручную - в целях экономии, например и когда он больше не нужен:)


MBo   (2002-09-09 14:36:00) [3]

А не удобнее ли в данном случае TStringList?


VAleksey   (2002-09-09 14:35:00) [4]

Да нужно.
Просто присваивай динамическому массиву nil и все будет ок.


Alx2   (2002-09-09 14:33:00) [5]

Попробуй вот так:


Type TAnsiStringArray = array of Ansistring;

procedure dosome (var a:TAnsiStringArray);


Иначе ты работаешь не с динамическим, а с открытым массивом.


Рыжик   (2002-09-09 14:27:00) [6]

Конечно нужно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо