【问题标题】:Checking for Null Pointer in Ada在 Ada 中检查空指针
【发布时间】:2018-01-04 04:19:29
【问题描述】:

一般来说,如果您尝试取消引用空指针(访问类型),Ada 将引发Constraint_Error。但是,如果您正在使用 pragma Suppress (all_checks),则此行为将被禁用。

在这种情况下,如何检查访问类型是否指向0x0 (null)?

考虑以下几点:

type My_Access_Type is access all My_Type'Class;

procedure myProcedure ( myAccess : in My_Access_Type ) is
begin

-- need to have check in here
end

【问题讨论】:

    标签: pointers ada


    【解决方案1】:
    if myAccess = null then
    ...
    end if;
    

    虽然它不一定指向 0x0。访问类型不是指针,并且可能以不同于普通地址的方式实现。

    【讨论】:

    • 所以,昨晚已经很晚了,我并不完全清楚发生了什么。我遇到了调试器的问题,当我检查访问类型(使用myAccess.all)的某些值时,我得到Cannot access memory at address 0x0,这是没有意义的。
    • @theMayer,你可能需要删除这个问题,然后再问一个问题! p myAccess 显示什么?
    • 我同意,但是,我的问题不再相关。我已经求助于使用打印命令。 :(
    • "Cannot access memory at address 0x0" 在调试器上下文中通常意味着内存未正确分配(或已被释放)。
    【解决方案2】:

    另一个可以帮助您的选项是将指针声明为“非空”。

    type My_Access is not null access My_Type;
    

    这可以防止声明未初始化的 My_Access 类型。

    X : My_Access; -- compile error
    

    此解决方案有一些缺点(请参阅https://en.wikibooks.org/wiki/Ada_Programming/Types/access#Null_exclusions),其正确用法取决于您的需求。

    【讨论】:

    • 检查禁用意味着这不起作用(至少,并非在所有情况下)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多