【问题标题】:Segmentation fault when associating optional allocatable array with optional non-allocatable dummy argument将可选的可分配数组与可选的不可分配的虚拟参数相关联时出现分段错误
【发布时间】:2020-06-19 15:46:12
【问题描述】:

以下 Fortran 代码在 SLES 15 上使用 ifort 版本 19.0.3.199 编译时生成分段错误 (-O0):

program test_prg
  call sub1()

contains

  subroutine sub1(opt)
    integer, allocatable, optional :: opt(:)
    call sub2(opt)
  end subroutine

  subroutine sub2(opt)
    integer, optional :: opt(:)
  end subroutine

end program

我不打算在sub2 中分配opt,所以我没有在那里指定allocatable 属性。如果我让它在两个子例程中都可以分配或非可选,或者如果我在调用sub1 时传递一个实际参数,那么代码将完成而没有错误。当使用 gfortran 从 gcc 版本 8.3.0 20190222 编译时,相同的代码也可以正常运行。

这是编译器的错误还是我在这里做了非法的事情?

【问题讨论】:

    标签: segmentation-fault fortran intel-fortran sles


    【解决方案1】:

    Fortran 2018 禁止您在 sub1 中使用 opt。对不存在的可选虚拟参数的限制包括(15.5.2.12):

    不存在的可选虚拟参数受以下限制。

    ...

    (8) 如果它是可分配的,则不应分配、解除分配或作为与可选的不可分配伪参数相对应的实际参数提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2018-01-22
      • 2016-06-17
      • 2023-04-10
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多