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