【发布时间】:2017-02-03 09:22:40
【问题描述】:
module sdata
integer, parameter :: nblock = 2
TYPE block_info
REAL, ALLOCATABLE :: w(:)
END TYPE block_info
TYPE(block_info), TARGET :: block(nblock)
end module sdata
module variable
use sdata
REAL, POINTER :: w(:)
contains
!.............................
subroutine set_current(n)
nullify(w)
allocate(w(10))
w(1:10) => block(n)%w(1:10)
end subroutine set_current
!.............................
end module variable
subroutine make_sth
use variable
use sdata
real,allocatable,dimension(:)::wm,wp,ww
integer n
allocate(wm(5),wp(5),ww(5))
do n = 1,nblock
block(n)%w(1:10) = (/ 1.,2.,3.,4.,5.,6.,7.,8.,9.,10./)
call set_current(n)
wp(1:5) = w(1:5)
wm(1:5) = w(6:10)
ww = wp + wm
do i = 1,5
print*, 'block = ',n,'ww = ',ww(i)
enddo
enddo
end subroutine make_sth
program main
use variable
use sdata
allocate(block(nblock)%w(10))
call make_sth
end program main
这是我的问题。但是,对于 nblock=1 ,如果我增加 nblock ,代码就可以完美运行。到 2 它会产生内存问题。怎么可能?
【问题讨论】:
-
请注意减少代码的间距,因为所有这些空白行都难以理解。
-
请不要使用不确定的短语,例如“它会导致记忆问题”。如果它打印一些错误消息,请将其粘贴到您的问题中。阅读How to Ask
标签: fortran gfortran fortran95