问一个关于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
没有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
...全文
相关推荐
fortran编译器
**自动内存管理**:引入了ALLOCATE和DEALLOCATE语句,简化了动态内存的分配和释放。
Fortran常见问题汇总
**关于MS PowerStation 4.0**: PowerStation 4.0是一个老版本的Fortran编译器,其存在许多bug,可能导致不可预知的问题。
C与Fortran混合编程+C向Fortran中传递字符串
由于它们对内存管理和数据结构的处理方式不同,因此需要一个桥梁来确保正确通信。
read_fortran_double:一个非常简单的Fortran库,可以读取Fortran格式的双精度(aka real(kind = 8)),并且可以由CC ++ Python程序调用
这样,Python就能读取并处理由`read_fortran_double`库解析的Fortran格式的双精度数据了。跨语言交互的一个重要挑战是数据对齐和内存管理。
FORTRAN 库函数
FORTRAN+編譯軟體之內存函數.PDF"可能专注于讨论与内存管理相关的库函数,例如动态内存分配函数ALLOCATE和DEALLOCATE。


脚本语言
