Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
ВнизРабота с памятью Найти похожие ветки
← →
Переяслов Григорий (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c