Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.027 c
14-1086904004
Aborigen
2004-06-11 01:46
2004.06.27
КПК с GSM/GPRS модулем. Помогите выбрать!?


4-1084866284
PavelT
2004-05-18 11:44
2004.06.27
Программное изменение параметра (По умолчанию) в реестре


3-1085906646
varfolomey
2004-05-30 12:44
2004.06.27
Помогите с InterBase 6.0


14-1086725155
Yegorchic
2004-06-09 00:05
2004.06.27
JavaScript


1-1086674913
MakNik
2004-06-08 10:08
2004.06.27
Oкругление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский