Форум: "Основная";
Текущий архив: 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.007 c