布尔数据无效

Invalid data for boolean

我的代码有错误。这个错误不是经常出现,不知道怎么调试。

错误是:

Exception name: CONSTRAINT_ERROR

Message: myFile.adb:42 invalid data

value 84 not in 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 放入布尔值中,但我不知道如何调试它。

我该怎么办?

编辑:添加更多详细信息

首先,如果可以的话,将 BOOL : Boolean; 更改为 BOOL : Boolean := raise Program_Error with "Uninitialized Value";
也尝试使用 ObjectA.BOOL := ObjectB.all.BOOL;

问题是你在程序中的赋值语句:

procedure myProcedure (ObjectA : in     T_Type;
                       ObjectB : in out Ptr_Type) is
begin 
   ObjectA.BOOL := ObjectB.BOOL; (line 42)
end procedure;

你看,这个 ObjectA 是 "in" 参数 - 因此你不能分配给它。

编辑: 既然问题已经解决了,问题就很明显了。

两个变量均未初始化 - 在这种情况下,如果可能,将选择无效值作为默认初始化。