Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
ВнизКопия массива Найти похожие ветки
← →
Massiv (2008-06-02 17:34) [0]Подскажите как сделать копию заполненного массива.
В книгах пишут что достаточно присвоить один массив к другому, но так у меня не получается. Привожу как пример свой код:
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; - не работает :((
← →
Reindeer Moss Eater © (2008-06-02 17:51) [1]SetLength(Tab1, 498);
SetLength(Tab2, 498);
А дальше move из первого во второй.
← →
DiamondShark © (2008-06-02 17:54) [2]
> В книгах пишут что достаточно присвоить один массив к другому
Так это про статические массивы пишут. А у тебя динамические.
Тут ручками, поэлементно.
> А дальше move из первого во второй.
Чудесов со строками не боишься?
← →
Reindeer Moss Eater © (2008-06-02 17:56) [3]Чудесов со строками не боишься?
Ты думаешь я не заметил у него длинных строк?
Заметил.
← →
DiamondShark © (2008-06-02 17:59) [4]
> Reindeer Moss Eater © (02.06.08 17:56) [3]
> Чудесов со строками не боишься?
>
> Ты думаешь я не заметил у него длинных строк?
> Заметил.
Посто ты такой коварный, чтоб народ не расслаблялся?
;)
← →
Reindeer Moss Eater © (2008-06-02 18:01) [5]так если первый массив не умрет, то строки останутся живы.
← →
palva © (2008-06-02 18:06) [6]
> то строки останутся живы.
Живы, конечно. Но будут синхронно меняться, чего автор, по-видимому, не хотел.{$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.
← →
ZENsan © (2008-06-02 18:12) [7]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;
← →
ZENsan © (2008-06-02 18:13) [8]Самые основы паскаля...
← →
DiamondShark © (2008-06-02 18:20) [9]
> ZENsan © (02.06.08 18:13) [8]
> Самые основы паскаля...
Которых ты не выучил.
> palva © (02.06.08 18:06) [6]
>
> > то строки останутся живы.
>
> Живы, конечно. Но будут синхронно меняться, чего автор,
> по-видимому, не хотел.
Это не самое страшное.
Гораздо интереснее
a1[0] := "qweqwe";
a2[0] := "oiuoiu"; // здравствуй, инвалид поинтер оперэйшн
← →
Palladin © (2008-06-02 18:24) [10]
>ZENsan ©
1. в паскале нет динамических массивов он тут нипричем
2. зачем тебе выделять и тут же освобождать память?
3. это копирование ссылки на массив, а не данных массива
оба, описанных тобою, идентификатора являются ссылками. со всеми вытекающими отсюда последствиями
← →
ZENsan © (2008-06-02 18:28) [11]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 всё..
← →
ZENsan © (2008-06-02 18:30) [12]И ыто я вообще-то скопировал исходник от автора...насчёт 3 пункта..
← →
Sapersky (2008-06-02 19:31) [13]Если Copy, то SetLength(Tab2, 498) не нужен.
← →
zensan © (2008-06-02 19:36) [14]Это к автору.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.05 c