Главная страница
    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.006 c
1-84982
-=Spike=-
2002-08-15 17:29
2002.08.26
Работа со значками.


1-85105
npAKtuk
2002-08-14 13:43
2002.08.26
Как передать число после Formatfloat в Excel


3-84915
BAY
2002-08-05 11:16
2002.08.26
Сравнение СУБД


14-85217
совсем Новенький
2002-07-29 20:40
2002.08.26
Перевести Pdf (Acrobat Reader) в dhtml, doc,....


4-85283
Unk
2002-06-20 08:45
2002.08.26
Кнопка на API





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