|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.04.2014, 13:22 | #1 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 17
|
переменная длина динамического массива
Здравствуйту ребята! Подкажите пожалуйста как в программе изменять длину динамического массива?
Мне надо увеличивать. К примеру по умолчанию ставлю SetLength(Mass,600000); Потом получается массив меньше, либо больше.
Если ты хочешь, то ты можешь!
|
18.04.2014, 13:26 | #2 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
18.04.2014, 13:43 | #3 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 17
|
Т.е. как задал сначала, так фиксированно и осталось?
Если ты хочешь, то ты можешь!
|
18.04.2014, 13:48 | #4 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,872
|
Все делается одной и той же процедурой SetLength. Не хватило изначально выделенной этой процедурой памяти, вызови ее еще раз с новым значением длины массива. Только старайся вызывать ее как можно меньшее количество раз.
|
18.04.2014, 13:50 | #5 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 17
|
Объясни пожалуйста, что будет? И меньше - это какой лимит?
Если ты хочешь, то ты можешь!
|
18.04.2014, 13:58 | #6 |
Пользователь
Регистрация: 17.04.2014
Сообщений: 17
|
допустим я создал массив длинной SetLength (mass, 10000000);
Получился у меня массив длинной 1000. Я для этого создам два д.массива. Один - SetLength (mass1, 10000000); //по максималке. второй SetLength (mass2, N); N-кол-во записанных элементов в первый массив. (т.е. счетчик записей) Потом перепишу первый во второй и получится нормальный массив. как-то по деревенски, но думаю получится.
Если ты хочешь, то ты можешь!
|
18.04.2014, 13:59 | #7 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,872
|
При увеличении размера массива как правило выделяется новый блок памяти, данные из прежнего блока копируются в новый. Затем прежний блок возвращается системе. Из-за этого адресное пространство процесса становится фрагментированным что в конце концов может привести к тому что в очередной раз не найдется свободный блок памяти нужного размера.
|
18.04.2014, 14:02 | #8 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,872
|
Цитата:
|
|
18.04.2014, 14:25 | #9 | |
Пользователь
Регистрация: 17.04.2014
Сообщений: 17
|
Цитата:
Если вызывать процедуру SetLength (в дальнейшем, для увеличения), то могут быть проблемы с памятью. Чтобы проблем не было: Что я хочу. Я хочу создать два массива. Пример: 1го длина 10000000 (10 млн элементов. ); //я его сделал такой длины чтобы не обращаться к проц.SetLength, а по максимуму. Пусть он заполнится до 1000, 10000000-1000=9999000 не заполнено, проверял, заполняется нулями. 2го длина будет 1000 (т.е. это длина кол-ва элементов записанных в первый массив). Фиксированная. Т.е. во втором массиве будет иметь 1000 элементов. Потом я копирую 1000 элементов из первого массива во второй с фиксированной длиной 1000. Т.е. будет массив у меня такой как надо, без свободных мест. Потом мне с ним очень удобно работать будет. Я так думаю Не знаю только будет все нормально или не очень. У меня проблемы с выражением своих мыслей.
Если ты хочешь, то ты можешь!
Последний раз редактировалось PierL; 18.04.2014 в 14:28. |
|
18.04.2014, 14:37 | #10 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,872
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
класс динамического массива | mixon-21 | Помощь студентам | 0 | 26.08.2013 19:25 |
Длина многомерного массива | Johnson | Общие вопросы Delphi | 2 | 18.02.2011 08:25 |
длина массива | Артэс | Общие вопросы C/C++ | 4 | 06.10.2010 12:34 |
Освобождение динамического массива? | VintProg | Общие вопросы Delphi | 15 | 28.08.2009 10:41 |
длина массива | skif93 | Microsoft Office Excel | 2 | 24.11.2007 11:45 |