Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Работа с динамическими массивами.   Найти похожие ветки 

 
1008 ©   (2004-06-10 13:29) [0]

В моей программе присутствует несколько форм (например 3). По ходу работы я произвожу следующее:
В форме №1 произвожу необходимые начальные установки;
В форме №2 производится обработка (при этом создаются динамические массивы - SetLength);
В форме №3 вывожу результат. Из формы номер три можно попасть в форму №1.

Если я опять перейду из формы №1 в форму №2, то массив будет создан заново - или в этом месте мне надо обнулить массив, а затем пересоздать?


 
Clickmaker ©   (2004-06-10 13:33) [1]


> Если я опять перейду из формы №1 в форму №2

Что значит перейдешь? Создашь ее заново или просто активируешь? Если массив - свойство формы, то при ее удалении удалится и сам массив. Если глобальный или форма не удаляется, то достаточно просто сказать SetLength в нужный момент, память перераспределится при этом автоматом.


 
1008 ©   (2004-06-10 13:39) [2]

Clickmaker ©  (10.06.04 13:33) [1]

Подозреваю, что пока я нахожусь в программе все формы существуют - я их не удаляю. Следовательно при переходе (в форме №3 комманда Close; в форме №2 аналогично) все формы существуют и массивы также - я могу обратиться к массиву, если он объявлен глобальной переменной.

То есть мне не надо заботиться о памяти - при вводе новой длины она автоматически будет очищена от станого массива и создан новый? Я правильно понял?


 
DimKa ©   (2004-06-10 13:47) [3]

Вроде при изменении длины данные массива не изменяются, при увеличении - просто добавляется памать, при уменьшении часть данных урезается.
Советую обнулить массив или необнулять, если в каждый элемент что-нибудь обязательно запишешь.


 
Anatoly Podgoretsky ©   (2004-06-10 13:51) [4]

Компилятор сам следит за удалением и созданием массива, через механизм ссылок.


 
Романов Р.В. ©   (2004-06-10 13:52) [5]


> Советую обнулить массив

Зачем обнулять?
Только при необходимости задать начальные значения элементов массива.


 
1008 ©   (2004-06-10 13:59) [6]

Если, например, при первом создании массива мне была нужна длина в 100 элементов, а во второй в 75 - что произойдёт при использовании SetLength? Будет ли освобождена память, которая была выделена на 25 элементов, которые уже мне не нужны?


 
Тимохов ©   (2004-06-10 14:07) [7]


> 1008 ©   (10.06.04 13:59) [6]

верьте setlength: если вы своими хитрымы ручками на нарушите подсчет ссылок, то все будет коррекно освобождено.

Т.о. если не выпендриваться и не пытаться замучать компилятор "хитрыми" методами работы с дин массивами, то он сможет вам гарантировать - за памятью под дин. массивами слежу я!


 
Романов Р.В. ©   (2004-06-10 14:09) [8]

При уменьшении длины массива память занимаемая верними элементами освобождается.
При увеличении длины резервируется новый кусок памяти, соответствующего размера, данные из "старого" массива копируются в новую область памяти, а память занимаемая "старым" массивом освобождается.


 
1008 ©   (2004-06-10 14:18) [9]

Спасибо теперь понял.



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
3-1086092210
avgur
2004-06-01 16:16
2004.06.27
Вопрос по FB


3-1085836984
Слэш
2004-05-29 17:23
2004.06.27
Расширить поле CHAR


4-1084945481
Kraj
2004-05-19 09:44
2004.06.27
Tray


6-1083771426
Filat
2004-05-05 19:37
2004.06.27
LDAP, как и чем его можно юзать в Delphi?


3-1085918548
SergeyM
2004-05-30 16:02
2004.06.27
DBMemo