我的代码有错误。该错误并不总是会出现,我也不知道如何调试它。
错误是:
异常名称:CONSTRAINT_ERROR
消息:myFile.adb:42个无效数据
值84不在0..1
引用的行是这一行:
procedure myProcedure (ObjectA : in Ptr_Type;
ObjectB : in out T_Type) is
Begin
ObjectB.BOOL := ObjectA.BOOL; (line 42)
end procedure;
使用
-- How myProcedure is called :
varA : aliased T_Type;
varB : aliased T_Type;
-- varA and varB are used many times
myProcedure(ObjectA => varA'Unrestricted_Access,
ObjectB => varB);
-- Where :
type T_Type is record
...
BOOL : Boolean;
end record;
type Ptr_Type is access all T_Type;
似乎代码试图将84放入布尔值,但是我不知道如何调试它。
我该怎么办?
编辑:添加更多详细信息
答案 0 :(得分:1)
首先,如果可以,请将BOOL : Boolean;
更改为BOOL : Boolean := raise Program_Error with "Uninitialized Value";
也尝试使用ObjectA.BOOL := ObjectB.all.BOOL;
。
答案 1 :(得分:1)
问题是您在过程中的赋值语句:
procedure myProcedure (ObjectA : in T_Type;
ObjectB : in out Ptr_Type) is
begin
ObjectA.BOOL := ObjectB.BOOL; (line 42)
end procedure;
您会看到,此ObjectA是“输入”参数-因此您无法为其分配。
编辑: 现在问题已解决,问题很明显。
这两个变量均未初始化-在这种情况下,如果可能,将选择无效值作为默认初始化。