GetMem, процедура
Синтаксис
procedure GetMem(var P: Pointer; Size: Longlnt);
Описание
Процедура GetMem выделяет Size байт динамической памяти и сохраняет указатель
на выделенную область памяти в Р. Она не инициализирует выделенную память. GetMem
не является настоящей процедурой.
Ошибки
Советы и приемы
- Память, выделенная GetMem, не инициализируется. При создании строки, динамического
массива или Variant, следует вызвать Initialize
или обнулить область памяти процедурой FillChar.
- При использовании встроенного менеджера памяти GetMern поддерживает многопоточность,
т. е. может быть вызвана из нескольких потоков одновременно (только в том
случае, если IsMultiThread равна True).
- Создавать запись или массив фиксированного размера следует с помощью New,
а не GetMem.
- Процедура GetMem обычно применяется для создания массива, размер которого
неизвестен на этапе компиляции. И хотя динамические массивы в значительной
степени исключили необходимость в использовании этой процедуры, она все
еще встречается в существующем коде Delphi.
Пример
// Создает серую палитру и возвращает дескриптор палитры. Хотя // можно создать палитру до 255 оттенков серого, многие видеоадаптеры // могут показывать только 15 или 16 битов на пиксел, т. е. 5 бит // для оттенка, или 32 различных серых оттенка, function CreateGrayScalePalette(NumShades: Byte) : HPalette; var LogPalette: PLogPalette; I: Integer; begin // TLogPalette ухе содержит место для одного элемента палитры, // поэтому выделяем память для NumShades-1 дополнительного // элемента. GetMem(LogPalette, SizeOf(TLogPalette) + (NumShades-1)*SizeOf(TPaletteEntry)); try LogPalette.palVersion := $300; LogPalette.palNumEntries := NumShades; // TLogPalette определяет массив palPalEntry с границами 0..0, // поэтому выключаем проверку на границы диапазона для установки // других границ массива. {$R-} for I := 0 to NumShades-1 do begin LogPalette.palPalEntry[I].peRed := I * 256 div NumShades; LogPalette.palPalEntry[I].peGreen := I * 256 div NumShades; LogPalette.palPaLEntry[I].peBlue := I * 256 div NumShades; LogPalette.palPalEntry[I].peFlags := 0; end; {$R+} Result := CreatePalette(LogPalette); finally FreeMem(LogPalette) end; end;
Смотрите также
Процедуры FillChar, FreeMem,
Initialize, ReallocMem,
функция GetMemory, SysGetMem.
Нет комментариев.
Оставить комментарий:
|
|