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

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

создание динамических массиво в Pascale


Vitalik ©   (2002-01-06 21:08:00) 

Привет!
Известно, что в старом добром Turbo Pascale небыло (и нету) динамических массивов, однако эту проблему решали с помощью указателей и так называемого "динамического распределения памяти". Так вот как именно это делается?
Вобще-то мне нужно решить следующую задачу: зарезервировать в памяти свободное место, забить его данными и потом эти данные считать.
Хотелось бы услышать ответы на оба эти вопроса!
Спасибо!


Val   (2002-01-08 12:14:00) [1]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1009992703&n=3


PVOzerski   (2002-01-08 11:36:00) [2]

Такие вещи с GetMem бывают полезны и в Delphi. Хотя бы потому, что иногда приходится пользоваться
старыми версиями компилятора, где стандартных средств работы с динамическими массивами нет (я,
например, вынужден пользоваться D3 из-за недостатка RAM на компьютере). Замечу еще кое-что:

1) Delphi RTL (не соврать бы, с какой версии, но в D3 уже есть) включает в себя функцию ReallocMem,
которая в данном случае, на мой взгляд, удобнее.
2) Иногда (особенно, когда проект работает с third-party DLL-ями) вместо GetMem/FreeMem/ReallocMem
имеет смысл использовать функции WinAPI: GlobalAlloc/GlobalLock/GlobalUnlock/GlobalFree.


Vovchik   (2002-01-08 00:25:00) [3]

Виталик, а тебе это надо в Паскале или в Дельфи? Из вопроса не понятно.

Если в Паскале, то можно делать GetMem. Если не использовать защищённый режим, то придётся сегментировать массив. А для сохранения данных при ресайзе, копировать данные со старого места на новое. Когда мне такое в Паскале было надо, я написал вой набор функций для этого. Если надо, могу порыться в закоулках винта, может найду.

Если в Дельфи, то чем тебе не нравится SetLength()? У него, конечно, есть один серьёзный недостаток, но ты вряд ли его заметил и вообще для твоих целей это скорей всего не важно.


evgeg   (2002-01-08 00:14:00) [4]

старый добрый паскаль:


type
TMas=array [0..0] of char;
PMas=^TMas;
var
a: PMas;
i: integer;
begin
{$I-}
readln (n);
getmem (a, n);
for i := 0 to n-1 do
a^ [i] := i;
freemem (a);
{$I+}
end.


Vitalik   (2002-01-07 22:40:00) [5]

Дак вот именно, это не динамический массив! Это просто использование указателя на массив! Динамический массив - это массив с переменной длинной!


skaminski~~~   (2002-01-07 00:28:00) [6]

2 vitalik
вот тебе и ответ на не было и нет ;) этот же код пройдет и в паскале, но это совсем не динамический массив :)
а вот массивы динамические в паскале сделать, конечно же можно


Tosov   (2002-01-06 23:27:00) [7]


type
PMyType=^TMyType;
TMyType=array[1..100] of Integer;

var
MT: PMyType;

begin
New(MT);
for i:=1 to 100 do
MT^[i]:=3+i*4;
for i:=1 to 100 do
writeln(MT^[i]);
Dispose(MT);
MT:=nil;
end;


Наверх

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