Форум: "Основная";
Текущий архив: 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
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c