Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизРабота с динамическими массивами. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c