Главная страница
    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
7-75689
AKV
2001-10-03 15:34
2002.01.24
Виртуальный принтер?


3-75481
Blind
2001-12-20 10:35
2002.01.24
Не работает многопользовательский режим доступа. Help me


1-75628
GreySerg
2002-01-08 20:27
2002.01.24
Как в property задать значение по умолчанию?


14-75669
Knight
2001-11-23 19:30
2002.01.24
И ещё кое-что нужно!!!!!


3-75497
Roman_zdrj
2001-12-20 12:56
2002.01.24
bde





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