Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
Armageddon   (2002-12-27 17:55) [0]

Раскажите пожалуйста, как создать динамический массив и как с ним работать.(Я знаю, что в Delphi он уже есть, но мне именно нужен свой).


 
Cu   (2002-12-27 18:01) [1]

array of [type]

for example :
a: array of integer;

SetLength (a, 5);

a [0] := ...;
...
a [4] := ...;
....
Finalize (a);

что -то типа того...


 
gsu   (2002-12-27 18:03) [2]

Что значит есть и нужен свой, это ж не компонент
1. объявляешь: a: array of TТвойТипДанных
2. Выделяешь под него память SetLenght(a, Твоя длина)
3. Работаешь с ним
4 Удаляешь его SetLenght(a,0) или a:=nil


 
Roma   (2002-12-27 18:58) [3]

Armageddon © (27.12.02 17:55)

Можешь попробовать вариантные массивы, создание - VarArrayCreate, остальные функции смотри в "See also" к VarArrayCreate...


 
OxOTHuK   (2002-12-27 22:21) [4]

а FINALIZE обязательно??


 
Kotka   (2002-12-27 22:58) [5]

a: array of integer;-это одномерный массив

a: array of array of integer;-а так двумерный
SetLength(a,5,2);


 
Armageddon   (2002-12-28 01:08) [6]

Всем большое спасибо. Вы мне очень помогли. В продолжении темы, а как создать массив на немного более низком уровне. Есть команды new(P1); b т.д. Я не могу понять, как сделать так, чтобы создать трубуемое кол-во (как изм P1). А потом как ссылаться .
Всем зарание благодарен.


 
Armageddon   (2002-12-28 14:01) [7]

Че никто не знает???


 
gsu   (2002-12-28 14:11) [8]

New(var P: Pointer) - динамически выделяет память, размер которой определяется типом типизированного указателя P, и возвращает P адрес выделенной области памяти. Отсюда и пляши.


 
Armageddon   (2002-12-28 15:22) [9]

gsu спасибо конечно, но проблема в другом, как изменять P
тоесть мне необходимо создать P1,p2,p3,p4 ... P10000000000000000.
Вот в чем проблема, не буду же я их вручную перечислять


 
KSergey   (2002-12-28 20:17) [10]

Тогда при чем тут "нижний" уровень? Создавайт нормальный динамическй массив p[1..10000000000000000] -и все.
Только не спрашивайте, почему массив такого размера не создается - он просто не лезет в память. Используйте другие средства (если вы перечислине их через new - проблему это не решит)


 
Fantasist   (2002-12-28 20:23) [11]

Эх, по видимому, что запостенно в этом форуме более месяца назад теряется безвозвратно.

Например:

TDynArray=class
private
mData:pointer;

function Get(Index:integer):Integer;
begin
Result:=PInteger(Cardinal(mData)+Index*SizeOf(Integer))^;
end;

procedure Set(Index:Integer;Value:Integer)
begin
PInteger(Cardinal(mData)+Index*SizeOf(Integer))^:=Value;
end;
public
constructor Create(Size:integer)
begin
GetMem(mData,*SizeOf(Integer));
end;
destructor Destroy; override;
begin
FreeMem(mData);
end;
public
property Items[Index:integer]:Integer read Get write Set; default;
end;


Дальше - ваша фантазия. Расширять, улучшать можно много.


 
PVOzerski   (2002-12-28 20:37) [12]

Есть очень полезная RTL-функция ReallocMem. В сочетании с GetMem идеально подходит, когда "штатных" динамических массивов нет (напр., в D2-3).

type
tx=array[1..1] of integer;
var
x:^tx;
i:integer;
begin
Getmem(x,100*sizeof(x[1]));
for i:=1 to 100 do
x[i]:=i;
ReallocMem(x,200*sizeof(x[1]));
for i:=101 to 200 do
x[i]:=-i;
ReallocMem(x,0);
end.



 
TTCustomDelphiMaster   (2002-12-28 20:37) [13]

MyType = record
...
end;
PMyType = ^MyType

var
a: array of PMyType;
...

SetLength(a, 100);
New(a[1]);
...
Dispose(a[1]);



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
6-37264
OlegL
2002-11-09 11:44
2003.01.13
Как заморозить прогу до приёма ответа?


1-37076
Gamar
2003-01-03 12:32
2003.01.13
Имя версии через директивы


14-37355
Свой
2002-12-20 11:44
2003.01.13
Создание ОС


1-37091
u96
2003-01-03 16:02
2003.01.13
утечка памяти, помогите, пожалуйста


3-36934
widom
2002-12-18 05:28
2003.01.13
Подскажите функцию





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