Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Работа с памятью   Найти похожие ветки 

 
Переяслов Григорий ©   (2003-06-19 19:46) [0]

У меня есть модуль Unit1, в котором есть массив A в разделе implementation (принципиально), описанный так
type
TArray = Array of Double;
и функция:
function F1 : Pointer;

implementation
var
A : TArray;

Также есть модуль Unit2, в котором описан массив Mas:

Mas : Array of TArray;

Массив Mas нужно заполнить данными с помощью F1. Я полагаю, что это можно сделать так:

function F1 : Pointer;
begin
SetLength(A, 20);
A[0] := 10;
...
Result := @A;
end;

...

Unit Unit2;

begin
SetLength(Mas, 10);
Mas[0] := F1; // Каждый раз ссылаемся на новый участок памяти
Mas[1] := F1;
...

end;

Можно ли так сделать? Если нельзя, то как нужно поступить в данной ситуации? Sorry за сумбур.


 
Separator ©   (2003-06-19 20:06) [1]

Немного не понял вопрос - Что нужно сделать?


 
Переяслов Григорий ©   (2003-06-19 20:11) [2]

Вопрос в том, правильно ли я выделяю память для массива Mas в примере? Я это делаю через единую переменную A, описанную в Unit1.


 
panov ©   (2003-06-19 20:39) [3]

Неправильно.
Опиши задачу, тогда можно будет подумать что к чему...


 
Palladin ©   (2003-06-19 21:00) [4]

SetLength работает с одним и тем же указателем
если тебе нужно инициализировать двумерный дин массив то


unit Unit1;
interface
type
TAOI=array of integer;

procedure NewArray(var a:TAOI);
implementation

procedure NewArray(var a:TAOI);
begin
setlength(a,10);
end;
end.

unit unit2;
interface
...
implementation
uses unit1;
...
var
mas:array of arra of integer;
begin
SetLength(mas,10);
for i:=0 to high(mas) do NewArray(mas[i]);
end;
...

end;


но только к чему такая конструкция?
если можно сразу

SetLength(mas,10);
for i:=0 to high(mas) do SetLength(mas[i],10);


 
Переяслов Григорий ©   (2003-06-20 09:11) [5]

Уточняю проблему.
Необходимо создать в памяти несколько реализаций массива A, используя одну переменную типа TArray (принципиально), и затем обращаться к ним через переменные типа Pointer. Освбождать их нужно, тоже используя pointer. Можно ли делать так, как описано в примере или там что-то не так?

type
TArray = array of integer;
var
A : TArray;
P1, P2 : Pointer;

begin
SetLength(A, 10);
P1 := @A[0];
...
SetLength(A, 20);
P2 := @A[0];
A := nil; // исходная переменная уже не нужна
...
V1 := TArray(P1^)[2];
V2 := TArray(P2^)[12];
...
SetLength(TArray(P1^), 0);
SetLength(TArray(P2^), 0);
end;


 
Palladin ©   (2003-06-20 09:15) [6]

что ты тут написал... это даже в голове с трудом интерпретируется...

а сразу не судьба?

type
TArray = array of integer;
var
P1, P2 : Pointer;

begin
SetLength(TArray(P1), 10);
SetLength(TArray(P2), 20);
end;



 
Переяслов Григорий ©   (2003-06-20 10:18) [7]

Спасибо, разобрался :-)



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

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
3-7294
niko4543
2003-06-08 15:13
2003.07.03
JPEG


1-7532
nester
2003-06-17 21:08
2003.07.03
Как сделать фон картинкой в TListView?


3-7364
ppcat
2003-06-11 10:35
2003.07.03
Developer Express Quantum Grid. Как получить значение выделенной?


1-7429
Hogo
2003-06-21 08:01
2003.07.03
Десятичный разделитель


14-7625
_MAD_
2003-06-18 23:16
2003.07.03
Выключение компьютера в ДОСЕ