![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копия массива [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 из первого во второй.