Локальные переменные
Переменные, которые живут и умирают внутри функции. По сути, являются расширенными аргументами функции.
Должны быть объявлены до любого действия внутри функции с помощью ключевого слова local
:
function main takes nothing returns nothing
local integer a = 1
local real b
endfunction
Утечка
Она же уточка, она же memory leak, это не освобождённая память. Возникает по двум причинам:
не удалённые объекты
локальные переменные с типом, наследуемым от handle
Первая причина проста - любой созданный объект необходимо удалить после использования.
function SomeTriggerAction takes nothing returns nothing
local location rally = GetUnitRallyPoint(GetTriggerUnit())
// делаем что-то с полученной точкой
call RemoveLocation(rally) // удаляем созданную точку после использования
set rally = null // об этом ниже
endfunction
Вторая причина не интуитивна и заключается в рукожопости создателей языка. Более подробно это описано здесь.
Чтоб их избежать достаточно запомнить простое правило: в момент выхода из функции всем локальным переменным с типом наследующим handle должно быть установлено значение null.
Last modified: 22 October 2024