布尔数据无效
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" 参数 - 因此你不能分配给它。
编辑:
既然问题已经解决了,问题就很明显了。
两个变量均未初始化 - 在这种情况下,如果可能,将选择无效值作为默认初始化。
我的代码有错误。这个错误不是经常出现,不知道怎么调试。
错误是:
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" 参数 - 因此你不能分配给它。
编辑: 既然问题已经解决了,问题就很明显了。
两个变量均未初始化 - 在这种情况下,如果可能,将选择无效值作为默认初始化。