我有以下程序
module test
contains
subroutine foo()
integer, allocatable :: a(:)
allocate(a(-5:5))
call bar(a)
print *, a
end subroutine
subroutine bar(a)
integer, intent(out) :: a(:)
a = 0
a(-4) = 3 ! here
a(2) = 3
end subroutine
end module
program x
use test
call foo()
end program
在标有“这里”的行中,我做错了。事实是,当我收到数组a
(在从 -5 到 +5 分配的调用者中)时,被调用者使用常规编号(1 到 n),这意味着分配 -4 我正在执行超出边界的分配。我如何指示编译器在bar
例程中,a
数组的编号必须与调用者中的编号相同?