![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с динамическими массивами. [D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
1008 © (2004-06-10 13:29:00)В моей программе присутствует несколько форм (например 3). По ходу работы я произвожу следующее:
В форме №1 произвожу необходимые начальные установки;
В форме №2 производится обработка (при этом создаются динамические массивы - SetLength);
В форме №3 вывожу результат. Из формы номер три можно попасть в форму №1.
Если я опять перейду из формы №1 в форму №2, то массив будет создан заново - или в этом месте мне надо обнулить массив, а затем пересоздать?
1008 (2004-06-10 14:18:00) [1]Спасибо теперь понял.
Романов Р.В. (2004-06-10 14:09:00) [2]При уменьшении длины массива память занимаемая верними элементами освобождается.
При увеличении длины резервируется новый кусок памяти, соответствующего размера, данные из "старого" массива копируются в новую область памяти, а память занимаемая "старым" массивом освобождается.
Тимохов (2004-06-10 14:07:00) [3]
> 1008 © (10.06.04 13:59) [6]
верьте setlength: если вы своими хитрымы ручками на нарушите подсчет ссылок, то все будет коррекно освобождено.
Т.о. если не выпендриваться и не пытаться замучать компилятор "хитрыми" методами работы с дин массивами, то он сможет вам гарантировать - за памятью под дин. массивами слежу я!
1008 (2004-06-10 13:59:00) [4]Если, например, при первом создании массива мне была нужна длина в 100 элементов, а во второй в 75 - что произойдёт при использовании SetLength? Будет ли освобождена память, которая была выделена на 25 элементов, которые уже мне не нужны?
Романов Р.В. (2004-06-10 13:52:00) [5]
> Советую обнулить массив
Зачем обнулять?
Только при необходимости задать начальные значения элементов массива.
Anatoly Podgoretsky (2004-06-10 13:51:00) [6]Компилятор сам следит за удалением и созданием массива, через механизм ссылок.
DimKa (2004-06-10 13:47:00) [7]Вроде при изменении длины данные массива не изменяются, при увеличении - просто добавляется памать, при уменьшении часть данных урезается.
Советую обнулить массив или необнулять, если в каждый элемент что-нибудь обязательно запишешь.
1008 (2004-06-10 13:39:00) [8]Clickmaker © (10.06.04 13:33) [1]
Подозреваю, что пока я нахожусь в программе все формы существуют - я их не удаляю. Следовательно при переходе (в форме №3 комманда Close; в форме №2 аналогично) все формы существуют и массивы также - я могу обратиться к массиву, если он объявлен глобальной переменной.
То есть мне не надо заботиться о памяти - при вводе новой длины она автоматически будет очищена от станого массива и создан новый? Я правильно понял?
Clickmaker (2004-06-10 13:33:00) [9]
> Если я опять перейду из формы №1 в форму №2
Что значит перейдешь? Создашь ее заново или просто активируешь? Если массив - свойство формы, то при ее удалении удалится и сам массив. Если глобальный или форма не удаляется, то достаточно просто сказать SetLength в нужный момент, память перераспределится при этом автоматом.