Module testMod
implicit none
contains
subroutine test_alloc( array ) !.. 如果外部调用,并且要返回array,则在此过程结束的地方不可以释放,必须在外部进行释放
implicit none
real, allocatable :: array(:)
!.. local variables
integer :: i
integer :: istat
if ( allocated(array) ) then
write( *,'(1x,a)' ) 'sub: array is allocated!'
else
write( *,'(1x,a)' ) 'the array is not allocated!'
end if
!.. deallocate the array
if ( allocated( array ) ) then
deallocate( array )
end if
!.. reallocate array
allocate( array(5), stat = istat )
!.. save data
forall ( i = 1: size(array) )
array(i) = 6 - i
end forall
!.. write out data
write( *,'(*(g0,3x))' ) array
end subroutine test_alloc
end module testMod
Program main
use testMod
implicit none
real, allocatable :: a(:)
integer :: istat
allocate( a(6), stat= istat )
a = [1,2,3,4,5,6]
write( *,'(*(g0,3x))' ) a
!.. call sub
call test_alloc( a )
write( *,'(*(g0,3x))' ) a
deallocate( a )
End program main
执行结果如下:
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000
sub: array is allocated!
5.000000 4.000000 3.000000 2.000000 1.000000
5.000000 4.000000 3.000000 2.000000 1.000000