在派生类型中使用 move_alloc
Using move_alloc in a derived type
我写了一个存储多维数组的派生类型。该数组将从文件读取到数组b
。然后我想使用成员 a
将 b
传输到派生类型 Space
。 mvalloc 的优点是不必分配两个可能会产生内存问题的大数组。
当我编译代码时出现错误
Call Move_Alloc (b, t% a)
1
Error: 'from' argument of 'move_alloc' intrinsic
at (1) must be ALLOCATABLE
类型定义及相关子程序如下
Type, Public :: Space
Character (Len=65) :: nm
Real, Allocatable :: a(:,:,:)
Contains
Procedure :: mvalloc => space_mvalloc
End Type Space
Subroutine space_mvalloc (t, b)
Class (Space), Intent (InOut) :: t
Real, Intent (InOut) :: b(:,:,:)
Call Move_Alloc (b, t% a)
End Subroutine space_mvalloc
如错误消息所述,move_alloc
的参数必须是可分配的。这就是他们两个。 from
是第一个,这必须是可分配的,分配才能从它移动。
你有
Subroutine space_mvalloc (t, b)
Class (SField), Intent (InOut) :: t
Real, Intent (InOut) :: b(:,:,:)
Call Move_Alloc (b, t% a)
End Subroutine space_mvalloc
b
这里是不可分配的。您应该添加该属性,并确保传入的实际参数是可分配的。
在调用 move_alloc
b
之后,相应的实际参数将被取消分配。
我写了一个存储多维数组的派生类型。该数组将从文件读取到数组b
。然后我想使用成员 a
将 b
传输到派生类型 Space
。 mvalloc 的优点是不必分配两个可能会产生内存问题的大数组。
当我编译代码时出现错误
Call Move_Alloc (b, t% a)
1
Error: 'from' argument of 'move_alloc' intrinsic
at (1) must be ALLOCATABLE
类型定义及相关子程序如下
Type, Public :: Space
Character (Len=65) :: nm
Real, Allocatable :: a(:,:,:)
Contains
Procedure :: mvalloc => space_mvalloc
End Type Space
Subroutine space_mvalloc (t, b)
Class (Space), Intent (InOut) :: t
Real, Intent (InOut) :: b(:,:,:)
Call Move_Alloc (b, t% a)
End Subroutine space_mvalloc
如错误消息所述,move_alloc
的参数必须是可分配的。这就是他们两个。 from
是第一个,这必须是可分配的,分配才能从它移动。
你有
Subroutine space_mvalloc (t, b)
Class (SField), Intent (InOut) :: t
Real, Intent (InOut) :: b(:,:,:)
Call Move_Alloc (b, t% a)
End Subroutine space_mvalloc
b
这里是不可分配的。您应该添加该属性,并确保传入的实际参数是可分配的。
在调用 move_alloc
b
之后,相应的实际参数将被取消分配。