小编Den*_*e P的帖子

使用存储管理器分配内存会导致非纯函数 (RM 13.1(22))

将一些旧代码移植到较新的 CentOs Linux 机器。我使用带有几个标志的 linux gnat:

Default_Switches ("ada") use ("-fstack-check", "-g", "-gnatVr", "-gnato", "-gnatE", "-gnatwmuv", "-gnata", "-m32");
Run Code Online (Sandbox Code Playgroud)

我有 gnat 版本:

gcc-gnat.i686   4.8.5-11.el7
Run Code Online (Sandbox Code Playgroud)

所以这些是前提条件。我现在有一个肯定可以工作的自写存储管理器,它被称为

St_Wa.Alloc(StoragePool, BitSize)
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题是,说实话,我真的不明白编译器失败的原因,所以我将非常感谢您详细解释为什么它不起作用!

function AllocMem(StoragePool : in St_Wa.Mem_Pool_Type;
                  Option: in Option_Type) 
                  return Option_Ref is

 subtype New_Type is Option_Type (Option.Kind);

 New_Option : New_Type;

for New_Option use at St_Wa.Alloc( StoragePool => StoragePool, 
                                    BitSize => New_Type'Size)
begin 
    Bl_Bl.Move( ... sth happens here ... )
    return Pointer(New_Option'Address);
end AllocMem;
Run Code Online (Sandbox Code Playgroud)

然而:

type Option_Type ( Kind : Option_Kind_Type := Marker) is
record
  Next …
Run Code Online (Sandbox Code Playgroud)

allocation ada gnat

1
推荐指数
1
解决办法
227
查看次数

标签 统计

ada ×1

allocation ×1

gnat ×1