Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
14-7642
Dimka Maslov
2003-06-16 10:07
2003.07.03
Аристократы или дегенераты


7-7732
MortalScorpion
2003-04-23 16:24
2003.07.03
Microfone


1-7389
VD601
2003-06-22 23:02
2003.07.03
Что означает строчка Result := E = 0; ?


14-7592
Всеволод Соловьёв
2003-06-12 22:11
2003.07.03
Так в чём же всё таки писать 3D-игры ?


7-7729
mobilzero
2003-04-21 11:02
2003.07.03
Как научить программу на АСМ работать под виндами?




   Наверх