Array (Array'First) "проверка индекса массива может завершиться неудачей" - PullRequest
0 голосов
/ 29 октября 2018

При анализе кодовой базы Ada с помощью CodePeer инструмент сообщает, что «проверка индекса массива может завершиться неудачей» в строке, которая делает это:

Param(Param'First) := ....

Параметр является переданным параметром out и относится к типу массива.

Насколько я понимаю, Ada переносит размеры массива и допустимые диапазоны индексов во время выполнения (для выполнения проверок диапазонов) ... Я не вижу, как какой-либо массив Ada может нарушать проверку диапазона, получая доступ к индексу array'First.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете предотвратить проблему, предоставив типу вашего неограниченного массива динамический предикат, который говорит, что массив не может быть пустым:

subtype Non_Empty_String is String
  with Dynamic_Predicate => Non_Empty_String'Length >= 1;
0 голосов
/ 29 октября 2018

Вы можете объявить массив с пустым диапазоном,

array(1..0)
array(10..5)
array(1337..-1)

и т.д.

В этом случае Param'First будет больше, чем Param'Last, и проверка индекса завершится неудачей.

Я полагаю, что Param относится к типу массива без ограничений, например String, f.eks?

type String is array(Positive range <>) of Character;

любой объект типа может быть объявлен как пустая строка:

Foo : String(1..0);

и затем передается в качестве параметра вашей подпрограмме

...