Appeler un sous-programme à Fortran (défaut de segmentation)
-
12-11-2019 - |
Question
Le code suivant donne une erreur de segmentation lorsqu'elle est compilée avec PGF90 sur le système Linux, tandis que l'exécution est exécutée avec succès lorsque j'ai utilisé l'Intel Visual Fortran sur 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
Une explication à cela?
La solution
Lorsque vous appelez un sous-programme qui a supposé des arguments factices de forme (comme c'est le cas dans ce programme), une interface explicite est requise. La façon la plus simple d'y parvenir est de mettre le sous-programme dans un module et d'utiliser le module dans le programme principal.
Autres conseils
Il peut être utile d'utiliser la syntaxe standard de Fortran 90, en particulier dans la façon dont vous déclarez et initialisez les tableaux.
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow