![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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) (в данном случае), при использовании условия память под такую запись выделяется на максимально требуемое значение
|
|
#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.
|
|
#7
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#8
|
|||
|
|||
|
Цитата:
Большое спасибо, теперь дошло) Всем, спасибо! |