首页 > 解决方案 > 将派生类型作为可选参数传递时出现分段错误

问题描述

以下代码在使用 gfortran 编译时会产生分段错误:

module my_exceptions

  implicit none

  type::error_container
  end type error_container

contains

  subroutine throw(status)
    type(error_container), intent(out), optional::status
  end subroutine throw

  subroutine test_throw(status)
    class(error_container), intent(out), optional::status

    call throw(status)

  end subroutine test_throw

end module my_exceptions

program test
  use my_exceptions, ONLY: error_container, test_throw
  implicit none
  type(error_container)::status

  call test_throw()

end program test

似乎 gfortran 正在尝试对status参数做一些事情,即使它不存在。status如果将传递给 test_throw(),则不会发生分段错误。此外,此代码在使用 ifort 编译时按预期工作。谁能帮我找出导致分段错误的原因?

标签: fortrangfortran

解决方案


应该使用type(error_container)而不是class(error_container)因为 error_container 是一个具体类型。感谢@King 指出这一点!


推荐阅读