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?

Était-ce utile?

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