Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];

Вниз

Динамические масивы   Найти похожие ветки 

 
Malder   (2002-08-14 20:57) [0]

Если изменять длину динамич. масива (setlength), то адреса его элементов в памяти меняются. Можно сделать так, чтоб не менялись ?


 
Anatoly Podgoretsky   (2002-08-14 21:55) [1]

Это врядли, этим они не отличаются от длинных строк


 
Геннадий   (2002-08-14 22:13) [2]

При увеличении длины новые элементы добавляются в конец и по началу их значения не определены. При урезании массива - удаляются конечные элементы. То есть:

Дано:

Ar = (1, 2, 3, 4, 5);

Setlength(Ar, 7); => Ar = (1, 2, 3, 4, 5, ?, ?);

Ar[6]:= 6; SetLength(Ar, 6); => Ar = (1, 2, 3, 4, 5, 6);

По-моему, так.


 
Юрий Зотов   (2002-08-14 22:32) [3]

Из хелпа:

For a long-string or dynamic-array variable, SetLength reallocates the string or array referenced by S to the given length. Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined.

Итак, в общем случае адреса уже имеющихся элементов меняются - поскольку меняется адрес самого массива. Разве что он случайно окажется распределен на то же самое место - но это случайно.

Если это принципиально важно, то можно использовать статический массив заведомо достаточного размера и вести счетчик реально заполненных элементов.

Но это совсем не лучший способ. Лучше попытаться пересмотреть подход к задаче.


 
Malder   (2002-08-14 23:18) [4]

Ну да. Понятно. Значит никак...

Видимо, массив и его элементы должны в памяти идти "подряд". И если setlength увеличивает размер массива, то дырки в памяти может не хватить и будет искаться более длинная свободная цепочка памяти. Потому как, если setlength уменьшает размер массива, то адрес массива не меняется. Вроде.

И вот отсюда что подумалось. Даже если с лихвой хватит памяти для выделения места под массив, то может не хватить именно такой длинной свободной последовательности памяти. И соответственно, масив не выделется, setlength вызовет исключение. Правильно ?


 
Геннадий   (2002-08-14 23:29) [5]

Windows имеет привычку скидывать данные на диск... Хотя, кто её знает, исключения она "любит"!


 
Anatoly Podgoretsky   (2002-08-15 00:20) [6]

Malder © (14.08.02 23:18)
Конечно это допустимо, но все таки 2гб



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
14-85211
Delph
2002-07-31 18:29
2002.08.26
Клиент для форума существует?


14-85174
Denvor
2002-07-28 03:55
2002.08.26
Цель в жизни?


3-84902
Vint
2002-08-06 10:35
2002.08.26
Резервное копирование


1-84944
maxim2
2002-08-13 09:45
2002.08.26
Можно ли добавить в ЕХЕ файл свою форму


14-85199
Kinder
2002-07-31 03:36
2002.08.26
Ищу компонент для Delhi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский