Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Динамический array of record в памяти как располагается ?   Найти похожие ветки 

 
Аккум   (2005-02-08 06:56) [0]

Последовательно рекорд за рекордом, или как попало ?


 
Skier ©   (2005-02-08 06:57) [1]

Последовательно


 
Аккум   (2005-02-08 07:19) [2]


type
 THLight2 = record        
   ID   : array [0.. 3] of Char;
   Size : Integer;              
   Name : array [0..19] of Char;
 end;                          

var
 HL3 : array of THLight2;


Я могу сделать ? :
SetLength(HL3, 10);
Move(AAl.HR3, HR3, SizeOf(THLight2)*10);


 
MBo ©   (2005-02-08 08:12) [3]

что за переменные в Move используются, непонятно ;)
Move записей в динамическом массиве делать можно, только с учетом того, нет ли в записях динамических полей (строк, дин. массивов) и применением правильного синтаксиса.


 
Чапаев ©   (2005-02-08 09:41) [4]

Хм... Насколько я знаю, в таком случае надо указывать не Move(A,...), а Move(A[0],...).


 
icWasya ©   (2005-02-08 09:49) [5]

И ещё.
В случае со статическими массивами, например  

Var
 HL2 : Array[0..9] of THLight2;

для Move нет разницы между HL2 и HL2[0] и оператор

Move(Source, HR2, SizeOf(THLight2)*10); // 1

действительно перепишет Source в массив HR2. Тоже самое сделает оператор

Move(Source, HR2[0], SizeOf(THLight2)*10); // 2

А в случае с динамическим массивом

Var
 HL3 : Array  of THLight2;
...
SetLength(HL3, 10);


операторы

Move(Source, HR3, SizeOf(THLight2)*10); // 3

и

Move(Source, HR3[0], SizeOf(THLight2)*10); // 4

сделают совсем разные вещи. Оператор 4 сделает то, чего Вы от него ожидали, а оператор 3 в лучшем случае приведёт к Access violation. Поэтому общая рекомендация - в процедуры, требуюцие бестиповые переменные, массивы (и строки) лучше передавать в виде 2 и 4.


 
Аккум   (2005-02-09 01:17) [6]


> Чапаев ©   (08.02.05 09:41) [4]
> Хм... Насколько я знаю, в таком случае надо указывать не
> Move(A,...), а Move(A[0],...).

Правильно.


> icWasya ©   (08.02.05 09:49) [5]

Я просто когда код обрезал, чтобы сюда вставить, слегка напутал.

Кстати, Move - это самый быстрый способ для копирования в данном случае ? Или есть что-нибудь, что работает ещё быстрее ?



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
1-1107724539
Poochacha
2005-02-07 00:15
2005.02.20
Single to String


3-1106299498
juice
2005-01-21 12:24
2005.02.20
Редактирование записи


14-1107166520
Alexander Panov
2005-01-31 13:15
2005.02.20
Блин, флудеры.


4-1104843979
Qware
2005-01-04 16:06
2005.02.20
Серийный номер мат. платы


1-1107871471
AL_
2005-02-08 17:04
2005.02.20
Фискальный регистратор