1

我有以下代码结构:

PROGRAM main

  IMPLICIT NONE

  REAL*8, DIMENSION(:), ALLOCATABLE :: var

  ALLOCATE(var(3))

  var(1) = 1.0d0
  var(2) = 2.0d0
  var(3) = 3.0d0

  CALL f1(var, f2)

  CONTAINS

  SUBROUTINE f1(arg_in, fun)

    REAL*8, DIMENSION(:), INTENT(IN) :: arg_in
    EXTERNAL fun

    PRINT *, arg_in

    CALL fun(arg_in)

    PRINT *, arg_in

  END SUBROUTINE f1

  SUBROUTINE f2(arg_in)

    REAL*8, DIMENSION(:), INTENT(INOUT) :: arg_in

    PRINT *, SIZE(arg_in)

    arg_in = 2.0d0 * arg_in

    RETURN

  END SUBROUTINE f2

END PROGRAM main

执行程序时,我注意到函数 f2 中数组的大小为 0。在我的实际程序中,我遇到了同样的问题,尽管与上面的简单程序相比,我收到了一条错误消息:

当指针 F 未与目标关联时尝试使用它

谁能提示可能是什么问题?

4

1 回答 1

4

您将子例程作为外部传递,但它具有假定形状的虚拟参数,因此它需要一个显式接口,您必须指定一个使用过程

procedure(f2) :: fun

或接口块

interface
  SUBROUTINE fun(arg_in)
    REAL*8, DIMENSION(:), INTENT(INOUT) :: arg_in
  end
end interface

之后,您还将意识到,这f2会修改数组arg_in,因此从 中引用它是非法的f1,其中数组arg_inintent(in)

于 2013-10-25T07:44:39.117 回答