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

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

Как скопировать один массив массивов в другой?


Страницы:   1 2

AKE ©   (2010-07-02 19:12:00) 

сабж.


Jeer   (2010-07-03 17:25:00) [21]

Вкупе, вот такие операции породят утечку, т.к. будет утеряна ссылка на В и ее инициализация (аллокация).

SetLength(ardB, 5);
arsB := arsA;


Anatoly Podgoretsky   (2010-07-03 17:25:00) [22]

> Amoeba_  (03.07.2010 17:18:14)  [14]

Не надо это слишком мягко сказано, это просто вредно, ведь придется сначала
выделить, потом освободить память, потом присвоить указатель.


Amoeba_   (2010-07-03 17:18:00) [23]


> Демо ©   (03.07.10 16:53) [11]


> для динамического массива, кроме этого, нужно ещё выполнить
>
> SetLength(B,Length(B));

Не надо.
Читаем справку:
If X and Y are variables of the same dynamic-array type, X :=Y points X to the same array as Y. (There is no need to allocate memory for X before performing this operation.)


Jeer   (2010-07-03 17:18:00) [24]

arsA,arsB: array[0..4] of double;
 ardA, ardB: array of double;

 SetLength(ardA, 5);
 SetLength(ardB, 5);

 arsA[0] := 1;
 arsB := arsA;
 arsB[0] := 2;
 ShowMessage(Format('%f %f',[arsA[0], arsB[0]]));

 ardA[0] := 1;
 ardB := ardA;
 ardB[0] := 2;
 ShowMessage(Format('%f %f',[ardA[0], ardB[0]]));

Как говорится -"Почувствуй разницу"


Jeer   (2010-07-03 17:16:00) [25]


> Демо ©   (03.07.10 16:53) [11]


Иди покури "травку", прежде чем советовать.


Демо   (2010-07-03 16:53:00) [26]

Как для динамических, так и для статических массивов, достаточно выполнить:

B := A;

для динамического массива, кроме этого, нужно ещё выполнить

SetLength(B,Length(B));


Anatoly Podgoretsky   (2010-07-03 13:42:00) [27]

> Германн  (03.07.2010 01:43:09)  [9]

Не обязательно, но копируемый массив должен быть такого же или меньшего
объема.


Германн   (2010-07-03 01:43:00) [28]


> А если это массив массивов

Для статических массивов это не имеет ни малейшего значения. Во всяком случае, если оба массива одного типа (соломку всё-таки решил подстелить :).


AKE   (2010-07-02 22:44:00) [29]

Jeer ©   (02.07.10 22:09) [7]
Знак вопроса забыл поставить...


Jeer   (2010-07-02 22:09:00) [30]


> AKE   (02.07.10 21:57) [6]
>
> Jeer ©   (02.07.10 21:51) [5]
> А если это массив массивов то всё перекопируется нормально.
> ..


Непонятно, это вопрос или утверждение ?


AKE   (2010-07-02 21:57:00) [31]

Jeer ©   (02.07.10 21:51) [5]
А если это массив массивов то всё перекопируется нормально...


Jeer   (2010-07-02 21:51:00) [32]

Вообще-то, для статических массивов одинаковой размерности

A := B;

означает копирование содержимого А в B.

Для динамических же - копирование адреса.


AKE   (2010-07-02 20:29:00) [33]

Германн ©   (02.07.10 20:02) [3]
Спасибо...


Германн   (2010-07-02 20:02:00) [34]

Move


AKE   (2010-07-02 19:36:00) [35]

статический массив статических массивов...


Amoeba_   (2010-07-02 19:22:00) [36]

Какой? Статический или динамический?


Страницы:   1 2

Наверх

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