Главная страница
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.023 c
4-1085052160
Denis_ada
2004-05-20 15:22
2004.06.27
О системе


14-1086655939
Andy BitOff
2004-06-08 04:52
2004.06.27
Редактор реестра под ДОС


3-1086169122
kot
2004-06-02 13:38
2004.06.27
Delphi 8 + ODBC


10-1013524555
flash1
2002-02-12 17:35
2004.06.27
А что под Delphi6 CORBA не работает?


3-1086001980
ossa
2004-05-31 15:13
2004.06.27
Покажите ссылки на статьи или документация по работе с Ораклом