10 · Массивы
Оператор ERASE
Когда элементы массива больше не нужны, занимаемое ими хранилище освобождают оператором ERASE. Имя и объявленный тип при этом сохраняются, поэтому массив остаётся в программе, но переходит в невыделенное состояние.
Синтаксис
Оператор имеет единственную форму с одним массивным аргументом.
ERASE <массив>[]Массивный аргумент указывает хранилище, которое нужно освободить. Цель должна быть изменяемой переменной массива или доступным массивным полем, записанным с обязательным суффиксом [], например ERASE values[] или ERASE bag.values[]; дополнительных режимов выполнения операция не требует.
Состояние после освобождения
Объявление массива продолжает действовать, а доступных элементов больше нет. До нового REDIM обращение к ним вызывает ошибку. Проверка ARRAYISALLOCATED возвращает FALSE. Фиксированное массивное поле TYPE освобождать нельзя.
Переход между состояниями виден на одном массиве:
DIM values[] AS INTEGER
REDIM values[1 TO 2]
PRINT ARRAYISALLOCATED(values[])
ERASE values[]
PRINT ARRAYISALLOCATED(values[])Программа выводит:
TRUE
FALSEПосле REDIM массив выделен, хотя ни одному элементу значение ещё не присвоено, поэтому первая проверка даёт TRUE. ERASE возвращает массив в состояние объявления без элементов, и вторая проверка даёт FALSE.
Связанный файл проверяет состояние до и после освобождения. Связанные материалы: освобождение массива.
Диагностика
MB2011— цель не является массивом.MB2010— цель объявлена неизменяемой.MB2025— цель является фиксированным полем массива в записиTYPE.MB3005— программа обращается к элементам после освобождения хранилища.