Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Вниз

создание динамических массиво в 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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.023 c
3-75498           Сашка                 2001-12-20 20:11  2002.01.24  
SQL


6-75642           BeepCheck             2001-10-29 21:09  2002.01.24  
html сохранить в файл


7-75690           Jazzy$                2001-10-10 19:45  2002.01.24  
Выключение монитора.


3-75523           cpu                   2001-12-18 23:25  2002.01.24  
Password for Oracle-7


1-75601           Delphimun             2002-01-07 15:45  2002.01.24  
Как сделать определённое окно главным?