Вызов подпрограммы в Фортране (ошибка сегментации) - PullRequest
2 голосов
/ 25 февраля 2012

Следующий код выдает ошибку сегментации при компиляции с pgf90 в системе Linux, при этом он успешно запускается, когда я использовал Intel Visual FORTRAN в 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 

Любое объяснение этому?

Ответы [ 2 ]

4 голосов
/ 25 февраля 2012

Когда вы вызываете подпрограмму, которая приняла фиктивные аргументы (как в этой программе), требуется явный интерфейс.Самый простой способ добиться этого - поместить подпрограмму в модуль и использовать модуль в основной программе.

1 голос
/ 06 сентября 2012

Может быть полезно использовать стандартный синтаксис Fortran 90, особенно в том, как вы объявляете и инициализируете массивы.

 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
...