私はこれを行うと非常に奇妙な動作が発生しています。私はこれが問題の起源だと考えていますが、私は間違っている可能性があります。あなたのいずれかが、これは確かに未定義の動作であることを確認できた場合、私は、少なくともfortran 90のインテント(アウト)スプライスされた配列の動作は未定義ですか?
に何が起こっているのか知っているだろう、私は(コンパイルするふりをしない)があるとし
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は、未定義の動作と同じですが、スライスされていない配列をSubに渡します。これは、サブブロックの初期化のためにスライスされた配列を渡すことが標準に違反していることを意味しますか?あなたはスライスを渡す場合
おかげで、すべての
私は明示的なインターフェースを持っています。私はちょうど問題の非関連コードを手に入れませんでした。未定義の振る舞いは、コードではまったく触れられていない型に含まれるポインタの割り当てを解除(または再割り当て、またはランダムメモリへの送信)します。 –
問題を再現するコードを提供してもらえますか? – steabert
それは非常に難しいだろう。しかし、私はちょうど問題を回避したので、この時点では単なる好奇心です。 –