问一个关于fortran内存管理的问题
知道用PB的人中很多都是精通很多语言的行家,至少C++ 方面是,
没有fortran的板块,只能在这里看看有没有人知道。。
问一个关于fortran内存管理的问题
!以下是代码
module TestDataModule
type SubData
real(kind=8) x
real(kind=8) y
end type
type NewData
real(kind=8) a
real(kind=8) b
type(SubData), allocatable :: point(:)
end type
contains
!开辟内存函数
subroutine CallMemory( num1,num2,called_data )
integer, intent(in):: num1,num2
type (NewData), allocatable:: called_data(:)
integer i
allocate (called_data(1:num1))
do i=1,num1
allocate(called_data(i)%point(1:num2))
end do
end subroutine
!删除内存函数
subroutine DeleteMemory( deleted_data )
type (NewData), allocatable:: deleted_data(:)
!问(3) :可能是上句的定义不正确????????????
integer num1,num2,i
num1=size(deleted_data)
do i=1,num1
deallocate (deleted_data(i)%point)
end do
deallocate(deleted_data)
!问(3) : 这里回出错!!!!!!!
end subroutine
!调用函数
subroutine TestFun()
type (NewData), allocatable:: mydata(:)
integer number1,number2
number1=2
number2=3
call CallMemory(number1,number2,mydata)
!函数返回后 mydata 的编号是 mydata(0:1),
!问(1) :怎么变成从 1开始编号 ? mydata(1:2)
!............................
!
mydata(1)%a=1.0
mydata(1)%b=2.0
mydata(1)%point(1)%x=31.0
!问(2) : 这里怎么无法赋值 ?
mydata(1)%point(1)%y=32.0
mydata(1)%point(2)%x=41.0
mydata(1)%point(2)%y=42.0
mydata(1)%point(3)%x=51.0
mydata(1)%point(3)%y=52.0
mydata(2)%a=6.0
mydata(2)%b=7.0
mydata(2)%point(1)%x=81.0
mydata(2)%point(1)%y=82.0
mydata(2)%point(2)%x=91.0
mydata(2)%point(2)%y=92.0
mydata(2)%point(3)%x=101.0
mydata(2)%point(3)%y=102.0
write(*,*),mydata(1)%a,mydata(2)%point(3)%y
!............................
call DeleteMemory(mydata)
end subroutine
end module
program TestFortran
use TestDataModule
implicit none
call TestFun()
end program TestFortran