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?

È stato utile?

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
scroll top