问一个关于fortran内存管理的问题

frajldss frajldss 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
知道用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

...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
frajldss
脚本语言 743 成员 8,037 内容