Вызов подпрограммы в Фортране (неисправность сегментации)
-
12-11-2019 - |
Вопрос
Следующий код дает ошибку сегментации при компиляции с 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
.
Любое объяснение для этого?
Решение
Когда вы называете подпрограмма, который предполагал формы фиктивных аргументов (как это в этой программе), требуется явный интерфейс.Самый простой способ добиться этого, состоит в том, чтобы поставить подпрограмму в модуль и использовать модуль в основной программе.
Другие советы
Может быть полезно использовать стандартный синтаксис 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
. Не связан с StackOverflow