Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с 3-х мерными массивами!


Автор: Grol 5.6.2005, 03:35
Уважаемые мастера!!! Ответьте мне пожалуйста на такой "ламерский" вопрос: как создавать дмнамические 3-х мерные массивы? От сюда же следует, как в них записывать значения и соответствено, как обращаться к определенным элемента такого массива? И хотелось, желательно, чтоб, на примере использовалось Setlength! Спасибо заранее.
P.S.: Ламер он и в Африке ламер (это я про себя)! :-)))

Автор: Pakshin A. S. 5.6.2005, 09:35
Код

var
 a: array of array of array of integer;
begin
 SetLength(a, 100, 20, 50);
 a[1,2,3]:=123;
end;

Автор: badaninslava 10.6.2005, 18:35
Pakshin A. S., а что делает SetLength? Выделяет память? Потом надо её освобождать? Извиняюсь за приметивный вопрос.

Автор: Vit 10.6.2005, 21:45
Цитата(badaninslava @ 10.6.2005, 09:35)
Pakshin A. S., а что делает SetLength? Выделяет память? Потом надо её освобождать? Извиняюсь за приметивный вопрос?



Да - выделяет память
Да - освобождает память
Да - выделенную память надо освобождать
На последний вопрос ответить не могу smile

Автор: Illusion Dolphin 11.6.2005, 19:52
Vit: Или я что-то не понимаю, или вот мои исправления:

1) а что делает SetLength? Выделяет память? - да, выделяет память
2) Потом надо её освобождать? - не обязательно, всё зависит от случая. Возьмём пример:
а) имеем форму, на неё ложим кнопку, при клике на неё:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
x : array of byte;
begin
 setlength(x,1024*1024*50);
 x[45767]:=9;
 ShowMessage(IntToStr(x[45767]));
end;

По нажатию на кнопку размер приложения (в taskManager'e увеличится до 50 мегов и появится сообщение. После закрытия этого сообщения размер опять восстановится до первоначального значения. т.е. произошло автоматическое освобождение памяти. Дело в том, что делфи ведёт счёт ссылок и удаляет массив, когда этот счётчик падает до нуля. Для примера возьмём
б)
Код

var
  Form1: TForm1;
  x : array of byte;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 setlength(x,1024*1024*50);
 x[45767]:=9;
end;

После выволнения нажатия на кнопку, размер приложения будет 50 метров до закрытия приложения.

Автор: badaninslava 12.6.2005, 19:57
А как освободить SetLength(a, 0, 0, 0) или нужна другая процедура?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)