Następujący kod zwraca błąd segmentacji, ponieważ przydzielana tablica, którą próbuję przekazać, nie jest poprawnie rozpoznawana (rozmiar zwraca 1, kiedy powinien być 3). Na tej stronie (http://www.eng-tips.com/viewthread.cfm?qid=170599) podobny przykład wydaje się wskazywać, że powinien działać poprawnie w F95; mój plik kodu ma rozszerzenie .F90, ale próbowałem go zmienić na F95 i używam gfortran do kompilacji.Jak przekazywać alokowane tablice do podprogramów w Fortranie
Zgaduję, że problem powinien polegać na tym, że przekazuję tablicę alokacji do podprogramu; Co ja robię źle?
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
PROGRAM test
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
IMPLICIT NONE
DOUBLE PRECISION,ALLOCATABLE :: Array(:,:)
INTEGER :: iii,jjj
ALLOCATE(Array(3,3))
DO iii=1,3
DO jjj=1,3
Array(iii,jjj)=iii+jjj
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
CALL Subtest(Array)
END PROGRAM
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
SUBROUTINE Subtest(Array)
DOUBLE PRECISION,ALLOCATABLE,INTENT(IN) :: Array(:,:)
INTEGER :: iii,jjj
PRINT*,SIZE(Array,1),SIZE(Array,2)
DO iii=1,SIZE(Array,1)
DO jjj=1,SIZE(Array,2)
PRINT*,Array(iii,jjj)
ENDDO
ENDDO
END SUBROUTINE
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
Należy zauważyć, że alokowane atrapowe argumenty są w rzeczywistości (szeroko wspierane - w tym gfortran od kilku lat) funkcją Fortran 2003. – IanH