Помилки при використанні масивів

При використанні масивів найбільш поширеною помилкою є вихід значення індексного виразу за допустимі межі, зазначені при оголошенні масиву.

Якщо в якості індексу використовується константа, і її значення виходить за допустимі межі, то така помилка виявляється на етапі компіляції програми. Наприклад, якщо в програмі оголошений масив

day : Array [0..6] of string [ll],
то під час компіляції програми інструкція
day [7]: = 'Неділя';

буде позначена як помилкова.
Якщо для доступу до елементу масиву в якості індексу використовується змінна або вираз, то можливе виникнення помилки (виключення) часу виконання програми. наприклад, якщо в програмі оголошений масив

tab1: array [1..N] of integer;
то інструкція
for i: = 0 to N do tab1 [i]: = 5;

формально є вірною, і її компіляція буде успішно виконана.

Однак під час виконання програми, при спробі привласнити значення неіснуючому нульового елементу масиву tab, на екран буде виведено повідомлення про помилку. Вид вікна і текст повідомлення залежить від того, звідки запущена програма.

При запуску даної програми з Delphi виникає виняток, і повідомлення має вигляд, наведений на рис. 5.22.

Рис. 5.22. Повідомлення про помилку при зверненні до неіснуючого елементу масиву (програма запущена з Delphi)

Якщо програма запущена з Windows, то при спробі привласнити значення неіснуючого елементу масиву на екран буде виведено повідомлення Range check error (помилка контролю діапазону). У заголовку вікна буде вказано назву програми, в процесі виконання якого сталася помилка (рис. 5.23).

Рис. 5.23. Повідомлення про помилку при зверненні до неіснуючого елементу масиву (програма запущена з Windows)

Поведінка програми при виході індексного виразу за межі діапазону допустимих значень визначається налаштуванням компілятора.
Для того щоб програма контролювала значення індексних виразів (в цьому випадку Delphi додає в виконувану програму інструкції, що забезпечують цей контроль), необхідно на вкладці Compiler діалогового вікна Project Options, яке відкривається вибором з меню Project команди Options, встановити прапорець Range checking (Контроль діапазону), що знаходиться в групі Runtime errors (Помилки часу виконання) (рис. 5.24).

Рис. 5.24. Вкладка Compiler діалогового вікна Project Options