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 ie를 늘리면됩니다. 2로 설정하면 메모리 문제가 발생합니다. 그게 어떻게 가능해?파생 형식 배열에 배열 구성 요소를 할당 한 후 오류가 발생했습니다.
코드의 간격을 줄이면 모든 빈 줄이 따라 다니기 어렵습니다. – francescalus
"기억 상 문제가 있습니다"와 같은 불확실한 문구를 사용하지 마십시오. 오류 메시지가 인쇄되면 질문에 붙여 넣으십시오. 읽기 [ask] –