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

Вниз

создание динамических массиво в Pascale   Найти похожие ветки 

 
Vitalik   (2002-01-06 21:08) [0]

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


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


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;


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

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


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

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


 
evgeg   (2002-01-08 00:14) [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.


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

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

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

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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.01.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
4-75710
manumba
2001-09-24 21:50
2002.01.24
SetWindowsHookEx (WH_Keyboard....) - срабатывает два раза(вместо одного)....


14-75673
Labert
2001-11-28 10:30
2002.01.24
Небольшое лингвистическое исследование


7-75686
cat
2001-09-22 17:43
2002.01.24
Сеть через СОМ порты


1-75573
Lotus
2002-01-05 15:27
2002.01.24
Проверка выражения на true/false НУЖНА ПОМОЩЬ!!!


4-75718
Serega__2
2001-11-23 15:37
2002.01.24
Синхронизация ScrollBar`ов у двух TCheckListBox