當我這樣做時,我遇到了非常奇怪的行爲。我認爲這是問題的根源,但我可能是錯的。如果你們中的任何可以證實這確實是不確定的行爲,我至少知道發生了什麼事情Fortran 90中intent(out)拼接數組的未定義行爲?
想我已經(不假裝編譯)
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
我的問題是:我在做一些奇怪?我有這樣的感覺,即使我傳遞了一個片段,意圖(out)也沒有定義整個塊,我需要一個inout。你能從標準中確認嗎?
編輯:inout給出相同的未定義的行爲,但將一個非切片數組傳遞給Sub作品。這是否意味着爲了初始化子塊而傳遞分片數組是違反標準的?
感謝
我有一個明確的接口。我剛剛省略了手頭問題的不相關代碼。未定義的行爲釋放(或重新分配,或將其發送給隨機存儲器)包含在一個類型中的指針,該類型根本不被代碼觸及。 – 2010-12-04 11:14:54