Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизПодскажте пример динамического массива. Найти похожие ветки
← →
array (2006-01-05 15:13) [0]Где можно посмотреть пример динамического массива ?
Нужно для Delphi 3
← →
MBo © (2006-01-05 15:18) [1]PArr = ^TArr;
TArr = array[Word] of Integer;
var
PA:PArr;
GetMem(PA, 100*SizeOf(Integer));
PA^[99]:=3;
...
FreeMem(PA);
← →
begin...end © (2006-01-05 15:20) [2]В Delphi 3 нет динамических массивов. Объявляйте тип-массив и выделяйте память, как в старом-добром Паскале:
type
PIntArray = ^TIntArray;
TIntArray = array [0..0] of Integer;
var
A: PIntArray;
I: Integer;
begin
GetMem(A, количество_элементов * sizeof(A[0]));
try
for I := 0 to количество_элементов - 1 do
A[I] := 123
finally
FreeMem(A)
end
end
Только Range Checking отключите.
← →
Anatoly Podgoretsky © (2006-01-05 15:56) [3]Не надо отключать, надо просто
TIntArray = array [0..MaxInt/SizeOf(Integer)-4] of Integer;
← →
begin...end © (2006-01-05 16:03) [4]> Anatoly Podgoretsky © (05.01.06 15:56) [3]
Конкретно это даже не скомпилируется. Но можно использовать и такой подход, однако преимущество [2] в том, что можно не бояться объявить переменную типа TIntArray.
← →
array (2006-01-05 16:50) [5]>В Delphi 3 нет динамических массивов.
Вообще-то есть - безразмерная строка (String).
Меня интересует можно ли сделать динамический массив в D3, не выделяя заранее память (без GetMem), что бы память сама выделялась при необходимости.
← →
begin...end © (2006-01-05 16:56) [6]> array (05.01.06 16:50) [5]
> Вообще-то есть - безразмерная строка (String).
Вообще-то нет, т.к. длинные строки -- это не динамические массивы.
← →
array (2006-01-05 17:35) [7]>Вообще-то нет, т.к. длинные строки -- это не динамические массивы.
Для длинных строк динамически выделяется память:
procedure TForm1.FormCreate(Sender: TObject);
var s:string; i:integer;
begin
s:="";
for i:=1 to 20000000 do s:=s+"1";
end;
//Смотрите размер exe через диспетчер задач
И ещё у них есть индекс. Чем они не динамический массив?
← →
jack128 © (2006-01-05 18:51) [8]begin...end © (05.01.06 16:03) [4]
однако преимущество [2] в том, что можно не бояться объявить переменную типа TIntArray.
у подхода [2] есть и недостатки - если включена проверка диапазонов ($R+), то при A[1] - вылезет ошибка..
← →
jack128 © (2006-01-05 18:52) [9]jack128 © (05.01.06 18:51) [8]
Блин, не в тему ответил. Извените.
← →
TUser © (2006-01-05 19:32) [10]
> Меня интересует можно ли сделать динамический массив в D3,
> не выделяя заранее память (без GetMem), что бы память сама
> выделялась при необходимости.
Тебе нужен автоматически расширяющийся массив? Легко можно сделать в виде класса, с default-свойством-массивом (самомуц прописать выделение памяти). Можно отнаследовать от TList. Другой вопрос - ошибки в программе (связанные с неправильным расчетом индекса элемента) искать будет намного сложнее.
← →
array (2006-01-05 19:38) [11]>Тебе нужен автоматически расширяющийся массив?
Да, только без всяких TList. Я слышал что можно использовать какие-то связанные списки.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.052 c