JASS Help

Локальные переменные

Переменные, которые живут и умирают внутри функции. По сути, являются расширенными аргументами функции.

Должны быть объявлены до любого действия внутри функции с помощью ключевого слова 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