Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-7712
SiJack
2003-06-17 14:00
2003.07.03
Не могу сочинять хелпы, ОТМОРАЖИВАЮСЬ !!!


9-7283
MRB_SPB
2003-01-15 18:16
2003.07.03
PlayStation2


1-7410
picaroon
2003-06-23 09:34
2003.07.03
Печать...


3-7318
abc
2003-06-08 23:52
2003.07.03
как сделать так что бы при вводе данных в DBGrid первая буква...


7-7730
Piero
2003-04-07 10:25
2003.07.03
Как закрыть чужой exe-шник из своей проги





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