2012-08-09 6 views
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 
+1

DaveP의 정답은 아래와 같습니다. 또한 -C (체크 범위)로 프로그램을 컴파일하면 프로그램에 무엇이 잘못되었는지에 대한 매우 유익한 메시지를 얻을 수 있습니다. – milancurcic

답변

7

당신은에서 메인 프로그램의 마지막 라인을 변경해야 컴파일러는이 유형 오류를 선택합니다.

관련 문제