Главная страница
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.021 c
14-7680
-LEX-
2003-06-16 18:26
2003.07.03
Подскажите, какой из учебников по Delphi 6 лучше купить?


1-7452
Silla
2003-06-23 12:50
2003.07.03
Как вставить текст в рисунок?


1-7446
OlegL
2003-06-23 15:16
2003.07.03
вызов чужой функции в dll


3-7352
AkaSaint
2003-06-09 14:50
2003.07.03
Locate не работает с кириллицей?


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