布尔值无效的数据

时间:2019-09-11 13:36:33

标签: pointers ada

我的代码有错误。该错误并不总是会出现,我也不知道如何调试它。

错误是:

  

异常名称: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放入布尔值,但是我不知道如何调试它。

我该怎么办?

编辑:添加更多详细信息

2 个答案:

答案 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是“输入”参数-因此您无法为其分配。

编辑: 现在问题已解决,问题很明显。

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