Chamando uma sub-rotina em Fortran (falha de segmentação)
-
12-11-2019 - |
Pergunta
O código a seguir apresenta erro de segmentação quando compilado com pgf90 no sistema Linux, enquanto é executado com sucesso quando usei o Intel Visual FORTRAN no 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
Alguma explicação para isso?
Solução
Quando você chama uma sub-rotina que assumiu argumentos fictícios de forma (como é o caso neste programa), uma interface explícita é necessária.A maneira mais fácil de conseguir isso é colocar a sub-rotina em um módulo e usar o módulo no programa principal.
Outras dicas
Pode ser útil usar a sintaxe padrão do Fortran 90, especificamente na maneira como você declara e inicializa arrays.
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow