当我这样做时,我遇到了非常奇怪的行为。我认为这是问题的根源,但我可能是错的。如果你们中的任何人都可以确认这确实是未定义的行为,我至少会知道发生了什么
假设我有(不假装编译)
subroutine X
real, allocatable :: block(:,:)
allocate(block(20,20))
call Sub(block(1:5, 1:5))
! here is undefined behavior
end subroutine
subroutine Sub(b)
real, intent(out) :: b(:,:)
b = 0.0
end subroutine
我的问题是:我在做一些奇怪的事情吗?我觉得意图(出)未定义整个块,即使我通过了一个切片,我也需要一个 inout。你能从标准中确认吗?
编辑: inout 给出相同的未定义行为,但将非切片数组传递给 Sub 有效。这是否意味着传递切片数组来初始化子块是违反标准的?
谢谢