Chiamare una subroutine in Fortran (Segmentation Fault)
-
12-11-2019 - |
Domanda
Il seguente codice fornisce un errore di segmentazione se compilato con PGF90 sul sistema Linux, mentre viene eseguito correttamente quando ho utilizzato l'Intel Visual Fortran su Windows.
program main
implicit none
integer:: a(3), b(3) ,c(3)
a=[3, 4, 5]
b=[1, 2, 3]
call sub(a,b,c)
write(*,*)'a+b = ',c
end program main
subroutine sub(a,b,c)
implicit none
integer, intent(in)::a(:),b(:)
integer, intent(out)::c(:)
c=a+b
end subroutine sub
.
Qualsiasi spiegazione per questo?
Soluzione
Quando si chiama una subroutine che ha assunto forma argomenti dummy (come nel caso in questo programma), è richiesta un'interfaccia esplicita.Il modo più semplice per ottenere questo, è quello di mettere la subroutine in un modulo e utilizzare il modulo nel programma principale.
Altri suggerimenti
Potrebbe essere utile utilizzare la sintassi standard Fortran 90, in particolare nel modo in cui dichiari e inizializzano gli array.
program main
implicit none
integer, dimension(3):: a, b ,c
a=(/3, 4, 5/)
b=(/1, 2, 3 /)
call sub(a,b,c)
write(*,*)'a+b = ',c
end program main
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow