Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо