fortran向量值函数给出了总线错误

时间:2011-12-06 03:51:31

标签: fortran

以下程序给我一个总线错误......任何想法为什么?

  program main
  integer, parameter :: n = 3
  integer, dimension(n) :: out

  out = rep(1,n)
  print *, (out(i), i=1,n)

  end program

  function rep(x,n)
  integer :: x
  integer :: n
  integer, dimension(n) :: rep

  do i=1,n
     rep(i) = x
  enddo

  end function

我认为这与integer, dimension(n) :: rep有关,但我不确定为什么会发生这种情况。

2 个答案:

答案 0 :(得分:5)

您需要使接口显式化以确保Fortran在您调用它时知道rep是什么。将您的rep函数放入一个单独的文件中的模块,如下所示:

  module m_rep

  contains

  function rep(x,n)

  implicit none

  integer :: x
  integer :: n
  integer :: i
  integer, dimension(n) :: rep

  do i=1,n
     rep(i) = x
  enddo

  end function

  end module

然后使用行

在主程序中使用该模块
  use m_rep

另外,使用隐式none来确保所有变量都被正确声明。

答案 1 :(得分:1)

仍然不能完全回答你的问题,但也许子程序调用而不是函数对你有用:

program main
implicit none
integer :: i
integer, parameter :: n = 3
integer, dimension(n) :: out

call repeat(1,3,out) 
print *, (out(i), i=1,n)

end program

subroutine repeat(x,n,y)
implicit none
integer :: i   
integer,intent(in) :: x,n
integer,dimension(n),intent(out) :: y

do i=1,n
  y(i) = x
enddo

endsubroutine

希望有人会为你的功能提出答案。我遇到的问题是Fortran不会让你做类似的事情:

integer,external :: rep(n)