Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1135803205
Gorger
2005-12-28 23:53
2006.01.22
Как объявить в runtime несколько однотипных элементов


14-1135465488
Bakset
2005-12-25 02:04
2006.01.22
Вопрос про сервисы для гуру...


3-1132719667
AlexLines
2005-11-23 07:21
2006.01.22
Изменение каталога временного файла BDE


8-1123460022
Valera
2005-08-08 04:13
2006.01.22
Проиграть AudioCD с помощью DSPack


2-1135838156
pavel_guzhanov
2005-12-29 09:35
2006.01.22
Как узнать максимальное значение в поле таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский