Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копия массива [D7, XP]


Massiv ©   (2008-06-02 17:34:00) 

Подскажите как сделать копию заполненного массива.
В книгах пишут что достаточно присвоить один массив к другому, но так у меня не получается. Привожу как пример свой код:

type
 TTree = record
   Title : String;
   ID    : Integer;
 end;

var
 Tab1 : Array of TTree;
 Tab2 : Array of TTree;

begin
SetLength(Tab1, 498);
SetLength(Tab2, 498);

Tab1 := Tab2; - не работает :((


zensan   (2008-06-02 19:36:00) [1]

Это к автору.


Sapersky   (2008-06-02 19:31:00) [2]

Если Copy, то SetLength(Tab2, 498) не нужен.


ZENsan   (2008-06-02 18:30:00) [3]

И ыто я вообще-то скопировал исходник от автора...насчёт 3 пункта..


ZENsan   (2008-06-02 18:28:00) [4]

type
 TTree = record
   Title: string;
   ID: Integer;
 end;

 TTreeArray = array of TTree;
var
 Tab1, Tab2: TTreeArray;

begin
 SetLength(Tab1, 498);
 SetLength(Tab2, 498);

 Tab1[0].Title := 'asdasdasd';
 Tab2 := Copy(Tab1, 0);
 Tab2[0].Title := 'sdfsdfsdf';

 WriteLn(Tab1[0].Title, ' ', Tab2[0].Title);
 ReadLn;
end.

да да попутался.. это же динамические..
Так чё тут умничать - просто Copy i всё..


Palladin   (2008-06-02 18:24:00) [5]


>ZENsan ©

1. в паскале нет динамических массивов он тут нипричем
2. зачем тебе выделять и тут же освобождать память?
3. это копирование ссылкина массив, а не данныхмассива

оба, описанных тобою, идентификатора являются ссылками. со всеми вытекающими отсюда последствиями


DiamondShark   (2008-06-02 18:20:00) [6]


> ZENsan ©   (02.06.08 18:13) [8]
> Самые основы паскаля...

Которых ты не выучил.


> palva ©   (02.06.08 18:06) [6]
>
> > то строки останутся живы.
>
> Живы, конечно. Но будут синхронно меняться, чего автор,
> по-видимому, не хотел.

Это не самое страшное.
Гораздо интереснее
a1[0] := 'qweqwe';
a2[0] := 'oiuoiu'; // здравствуй, инвалид поинтер оперэйшн


ZENsan   (2008-06-02 18:13:00) [7]

Самые основы паскаля...


ZENsan   (2008-06-02 18:12:00) [8]

type
TTree = record
  Title : String;
  ID    : Integer;
end;

 TTreeArray = array of TTree;
var
Tab1, Tab2 : TTreeArray;

begin
SetLength(Tab1, 498);
SetLength(Tab2, 498);

Tab1 := Tab2;
end;


palva   (2008-06-02 18:06:00) [9]


> то строки останутся живы.

Живы, конечно. Но будут синхронно меняться, чего автор, по-видимому, не хотел.
{$APPTYPE CONSOLE}
var
 a1, a2: array of String;
begin
 SetLength(a1, 3);
 a1[0] := '000';
 a1[1] := '111';
 a1[2] := '222';
 SetLength(a2, 3);
 move(a1, a2, 12);
 WriteLn(a1[1]); // 111
 WriteLn(a2[1]); // 111
 a1[1][2] := 'x';
 WriteLn(a1[1]); // 1x1
 WriteLn(a2[1]); // 1x1
end.


Reindeer Moss Eater   (2008-06-02 18:01:00) [10]

так если первый массив не умрет, то строки останутся живы.


DiamondShark   (2008-06-02 17:59:00) [11]


> Reindeer Moss Eater ©   (02.06.08 17:56) [3]
> Чудесов со строками не боишься?
>
> Ты думаешь я не заметил у него длинных строк?
> Заметил.

Посто ты такой коварный, чтоб народ не расслаблялся?
;)


Reindeer Moss Eater   (2008-06-02 17:56:00) [12]

Чудесов со строками не боишься?

Ты думаешь я не заметил у него длинных строк?
Заметил.


DiamondShark   (2008-06-02 17:54:00) [13]


> В книгах пишут что достаточно присвоить один массив к другому

Так это про статические массивы пишут. А у тебя динамические.
Тут ручками, поэлементно.


> А дальше move из первого во второй.

Чудесов со строками не боишься?


Reindeer Moss Eater   (2008-06-02 17:51:00) [14]

SetLength(Tab1, 498);
SetLength(Tab2, 498);

А дальше move из первого во второй.


Наверх

Титульная страница Поиск, карта сайта Написать письмо