0
포트란에서 세그멘테이션 오류 문제가 있습니다. 서브 루틴을 호출하여 포인터 배열을 할당하고이 배열을 다른 서브 루틴에 전달합니다.포인터 배열의 포트란 세그먼트 화 오류
이 프로그램을 Linux 컴퓨터의 PGI fortran 9.0.2로 컴파일합니다. 여기 내 테스트 프로그램입니다. 이 문제를 어떻게 해결해야합니까?
도움 주셔서 감사합니다.
module hogehoge
implicit none
type foo
real, pointer :: x(:)=>null()
end type foo
contains
subroutine hogehoge_func(foox)
type(foo), intent(inout) :: foox
integer i
allocate(foox%x(2048))
do i = 1, 2048
foox%x(i)=i
end do
end subroutine hogehoge_func
end module hogehoge
!main program------------------------------------------
program test
use hogehoge
implicit none
type(foo) :: foox
call hogehoge_func(foox)
print*, 'in main program'
print*, foox%x(1:20)
call hoge(foox%x)
end program test
subroutine hoge(foox)
use hogehoge
implicit none
type(foo), intent(in) :: foox
print*, 'in subroutine'
print*, foox%x(1)
end subroutine hoge
다음은 출력물입니다. 다음, 당신이 모듈에 루틴 hoge
정의 된 것을 수입 한 경우
call hoge(foox%x)
call hoge(foox)
에 :
in main program
1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000
9.000000 10.00000 11.00000 12.00000
13.00000 14.00000 15.00000 16.00000
17.00000 18.00000 19.00000 20.00000
in subroutine
Segmentation fault
DaveP의 정답은 아래와 같습니다. 또한 -C (체크 범위)로 프로그램을 컴파일하면 프로그램에 무엇이 잘못되었는지에 대한 매우 유익한 메시지를 얻을 수 있습니다. – milancurcic