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

Вниз

Подскажте пример динамического массива.   Найти похожие ветки 

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

Наверх




Память: 0.49 MB
Время: 0.028 c
5-1122036485
DimaBr
2005-07-22 16:48
2006.01.22
Handle компонента


2-1135697703
kyn66
2005-12-27 18:35
2006.01.22
Предотвратить появление Popup меню


2-1135803205
Gorger
2005-12-28 23:53
2006.01.22
Как объявить в runtime несколько однотипных элементов


1-1134641063
Junior
2005-12-15 13:04
2006.01.22
Нужна информация о генераторах псевдослучайных чисел


14-1135845793
oleggar
2005-12-29 11:43
2006.01.22
alfa filemonitor