Главная страница
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.022 c
9-1078136542
woolf/psycho
2004-03-01 13:22
2004.06.27
DirectPaly в DelphiX


6-1083681837
P.D.YU
2004-05-04 18:43
2004.06.27
UDP


10-1014009500
Dima Kalugin
2002-02-18 08:18
2004.06.27
Где взять готовые Корба объекты


1-1086976921
MuxauJl
2004-06-11 22:02
2004.06.27
будильник


4-1084972893
Evgeniy_K
2004-05-19 17:21
2004.06.27
Проводник