이것은 간단한 프로그램입니다. j>4
일 때 오류가 나올 것으로 예상했지만 Fortan은 그 대신 array(2,5)=0.0
을 표시합니다. 스택 오버플로 오류가 발생하면 더 유용 할 것입니다.왜 오버플로 오류가 발생하지 않습니까?
귀하의 의견은 무엇입니까?
program main
implicit none
integer,parameter :: n=2,z=4
!real, dimension(1:2,1:4) :: array
real,allocatable :: array(:,:)
integer :: i,j
allocate(array(n,z))
array = 0.0
array(1,1)=1.0 ; array(1,2)=2.0 ; array(1,3)=3.0 ; array(1,4)=4.0
array(2,1)=5.0 ; array(2,2)=6.0 ; array(2,3)=7.0 ; array(2,4)=8.0
do j=1,5
do i=1,2
write(*,*) i,j
write(*,*) array(i,j)
enddo
enddo
end program main
메모리에 특정 공간을 할당하지 않았기 때문에 ** 사용하려고하면 ** 충돌이 발생합니다. 상황에 따라 문제가 발생할 수도 있고 그렇지 않을 수도 있습니다. 이를 정의되지 않은 동작이라고합니다. – Havenard