Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
14-75664
Vitaly
2001-11-29 14:20
2002.01.24
Из дневника ученика:


3-75492
Killavit
2001-12-18 22:50
2002.01.24
Индексация Таблиц


1-75568
NNC
2002-01-06 14:21
2002.01.24
Вопросик!


3-75517
ДЛЛ
2001-12-21 12:27
2002.01.24
Как программно создавать пользователя и давать ему гранты


1-75627
Aspir
2002-01-05 16:09
2002.01.24
Использование DLL в delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский