이렇게하면 매우 이상한 행동이 발생합니다. 이것이 문제의 근원이라고 생각하지만 잘못 될 수 있습니다. 나는 이상한 뭔가를하고 있어요 : 당신의 어떤이는 참으로 정의되지 않은 동작을 확인할 수있는 경우에, 나는 적어도 내 질문은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이 필요하다. 표준에서 확인할 수 있습니까?편집 : inout은 정의되지 않은 동작을하지만, 슬라이스되지 않은 배열은 Sub에 전달합니다. 이것은 서브 블록의 초기화를 위해 슬라이스 된 배열을 전달하는 것이 표준을 위반하고 있다는 것을 의미합니까? 당신이 조각을 전달하면
감사
모든
명시적인 인터페이스가 있습니다. 문제의 비 관련 코드를 생략했습니다. 정의되지 않은 동작은 코드에서 전혀 건드리지 않은 유형에 포함 된 포인터를 할당 해제하거나 다시 할당하거나 임의의 메모리로 보냅니다. –
문제를 재현하는 코드를 제공해 주시겠습니까? – steabert
그것은 매우 어려울 것입니다. 그러나, 나는이 문제를 해결하기 위해 노력했기 때문에이 시점에서 호기심에 불과합니다. –