PureBasic

AllocateStructure()

Синтаксис

*Item.StructureName = AllocateStructure(StructureName)

Описание


Динамически создает новый экземпляр структуры (объект, для которого структура используется в качестве типа), и сразу выделяет под него память. Этот экземпляр структуры будет проинициализирован и полностью готов к использованию, без необходимости вызова InitializeStructure(). Для работы с этим экземпляром структуры необходимо использовать указатель, объявленный с данным 'StructureName' в качестве типа.

Параметры

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

Возвращаемое значение

Возвращает адрес (Указатель) нового экземпляра структуры, в противном случае 0.

Комментарии

Эта команда предназначена для опытных пользователей и не нужна для большинства программ. Часто лучше использовать структурированный Массив, Связный список или Хеш-карту для хранения динамических структурированных элементов.

Для удаления экземпляра структуры созданного с помощью AllocateStructure() можно использовать команду FreeStructure(), но нельзя удалить такую структуру с помощью связки функций ClearStructure + FreeMemory(). При завершении программы все экземпляры структуры удаляются автоматически.

Если программа даёт сбой при этой команде, это обычно является результатом повреждения данных в памяти программы в более раннее время, например при записи в память за пределами выделенной области памяти. Реальная причина такой ошибки может быть найдена с помощью средства отладчика Пурифаер.

Пример

Structure People ; Создание шаблона структуры.
    Name$
    List Friends$()
EndStructure

*DynamicPeople.People = AllocateStructure(People) ; Динамическое создание экземпляра структуры, по шаблону структуры.
*DynamicPeople\Name$ = "Fred"                      ; Обращение к полю экземпляра структуры через указатель.
AddElement(*DynamicPeople\Friends$())
*DynamicPeople\Friends$() = "Stef"

Debug *DynamicPeople\Name$
Debug *DynamicPeople\Friends$()

FreeStructure(*DynamicPeople) ; Удаление экземпляра структуры.

См. также

FreeStructure()

Поддерживаемые OS

Все

<- AllocateMemory() - Оглавление Memory - CompareMemory()->