I have written a derived type that stores a multidimensional array. The array will be read from a file to an array b. I then want to transfer b to the derived type Space using member a. The advantage for mvalloc is not having to allocate two large arrays which might create memory problems.  
When I compile the code I am getting the error
Call Move_Alloc (b, t% a)
               1
Error: 'from' argument of 'move_alloc' intrinsic 
at (1) must be ALLOCATABLE
The type definition and relevant subroutine follows
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
 
                        
As the error message says, the arguments to
move_allocmust be allocatable. That's both of them.fromis the first, and this must be allocatable for the allocation to move from it.You have
bhere is not allocatable. You should add that attribute, and ensure that the actual argument passed in is allocatable.After the call to
move_allocb, and the corresponding actual argument, will be unallocated.