Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.26;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
4-85295
Керик
2002-06-21 05:36
2002.08.26
Как узнать количество потоков и Base Priority


1-85108
dimanew
2002-08-15 05:52
2002.08.26
Есть задача из ул.ленина сделать ул.Ленина, я использую


3-84933
restless
2002-08-07 11:11
2002.08.26
Таблицы в приложении


1-84988
ed_209
2002-08-16 03:25
2002.08.26
ListBox & TreeView Scrolling


3-84927
КСА
2002-08-06 06:41
2002.08.26
Два одинаковых бланка на одном листе в QReport