Главная страница
    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.033 c
2-1136464753
ArtemESC
2006-01-05 15:39
2006.01.22
Получить иконку...


3-1132758007
Vikusik
2005-11-23 18:00
2006.01.22
inser+insert + ..... +insert = 0 md free memory


14-1135920937
begin...end
2005-12-30 08:35
2006.01.22
С Днём рождения! 30 декабря


14-1135745246
Хинт
2005-12-28 07:47
2006.01.22
Кто-нибудь знаком с программой ЛАД?


2-1135852478
pavel_guzhanov
2005-12-29 13:34
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский