CONSTRAINT_ERROR,“索引检查失败”

时间:2019-04-07 12:58:29

标签: ada gnat

我正在用Ada做一个算术表达式解释器。

示例输入:“ ADD a b; ADD b c; PRN c; SUB c a; PRN c;”

我的代码很长,所以我不想复制所有代码,而是尝试解释其中的一小段错误。

的状态是一种状态,由一条记录表示,具有字段“大小”和一个称为表达式的数组。表达式由记录表示,其字段为:Op(枚举类型),LHS和RHS(字符)。
函数notSpaceLinSearch会查找输入字符串中第一个不是空格的元素的索引。

所以我的问题是,为什么会引发错误?为什么只是在索引引用的第5次?

非常感谢您的回答。

while loopIndex <= numOfExpressions loop
         s.Size := s.Size + 1;
         notSpaceLinSearch(charArray, ' ', contains, notSpaceIndex);
         foundChar := charArray(notSpaceIndex);
         case foundChar is
            when 'A' => s.Expressions(s.Size).Op := ADD;
            when 'S' => s.Expressions(s.Size).Op := SUB;
            when 'M' => s.Expressions(s.Size).Op := MUL;
            when 'P' => s.Expressions(s.Size).Op := PRN;
            when 'I' => s.Expressions(s.Size).Op := INI; -- raised CONSTRAINT_ERROR .... index check failed
            when others => null;
         end case;
....
....
...
end loop;

1 个答案:

答案 0 :(得分:1)

感谢您的回答,问题是Expressions数组的错误初始化。 (用N-1代替N)。