![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день, интересует как управлять памятью под динамическую запись
типа Код:
type TRect = packed record case Flag: Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: Integer); end; то есть как правильно инициализировать объект методом New, и после инициализации и занесения объектов(указателей на них) в список TList как правильно освободить выделенную память?.Ведь размер объектов не фиксированный. Заранее спасибо Последний раз редактировалось Admin, 28.04.2013 в 19:22. |
#2
|
||||
|
||||
![]() размер как раз фиксированный и равен SizeOf(TRect) (в данном случае), при использовании условия память под такую запись выделяется на максимально требуемое значение
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#3
|
|||
|
|||
![]() Цитата:
Вот к примеру запись: Код:
TRec1=record a:integer; case flag:boolean of True: (done:integer); False:(b,c:integer) end; Var R:TRec1; Если следовать вашему совету, должно выделиться 20 Б, но Код:
ShowMessage(IntToStr( sizeof(r))) |
#4
|
|||
|
|||
![]() Цитата:
А с чего ты решил, что должно быть 20? Integer - это 4 байта. |
#5
|
|||
|
|||
![]() Цитата:
20=SizeOf(a)+SizeOf(flag)+SizeOf(done)+SizeOf(b)+S izeOf(c)=5*4 |
#6
|
||||
|
||||
![]() У тебя ЛИБО done, ЛИБО b и c.
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
||||
|
||||
![]() Цитата:
Цитата:
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#8
|
|||
|
|||
![]() Цитата:
Большое спасибо, теперь дошло) Всем, спасибо! |