在使用 CodePeer 分析 Ada 代码库时,该工具在执行以下操作的行报告“数组索引检查可能失败”:
Param(Param'First) := ....
Run Code Online (Sandbox Code Playgroud)
Param 是传入的out参数 - 它是数组类型。
我的理解是 Ada 在运行时携带数组大小和有效索引范围(为了执行范围检查)......我看不出任何 Ada 数组如何通过访问 index 来违反其范围检查array'First。
我错过了什么?
你可以声明一个空范围的数组,
array(1..0)
array(10..5)
array(1337..-1)
Run Code Online (Sandbox Code Playgroud)
等等。
在这种情况下,Param'First 将大于 Param'Last,索引检查将失败。
我猜 Param 是一种不受约束的数组类型,比如 String,f.eks?
type String is array(Positive range <>) of Character;
Run Code Online (Sandbox Code Playgroud)
然后可以将任何类型的对象声明为空字符串:
Foo : String(1..0);
Run Code Online (Sandbox Code Playgroud)
然后作为参数传递给你的子程序