2

以下代码在 Linux 系统上使用 pgf90 编译时出现分段错误,而当我在 Windows 上使用 Intel Visual FORTRAN 时成功运行。

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 

对此有何解释?

4

2 回答 2

4

当您调用具有形状虚拟参数的子例程(如本程序中的情况)时,需要显式接口。实现这一点最简单的方法是将子程序放在一个模块中,并在主程序中使用该模块。

于 2012-02-24T23:02:50.460 回答
1

使用标准 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
于 2012-09-06T19:11:10.693 回答