fortran - 将派生类型作为可选参数传递时出现分段错误
问题描述
以下代码在使用 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 编译时按预期工作。谁能帮我找出导致分段错误的原因?
解决方案
应该使用type(error_container)
而不是class(error_container)
因为 error_container 是一个具体类型。感谢@King 指出这一点!
推荐阅读
- java - android Studio:蓝牙发现不再适用于 Android 10?
- php - 带有教义的类型提示:当使用带有类型提示的 PHP 7.4 时,@ORM\Column 注释上是否仍需要类型属性?
- firebase - Firebase 云消息传递:我们无法注册默认服务工作者错误
- angular - cdkDropListDropped 从未在 Angular 10 和材料表中触发
- python - 用于创建对象的多处理 + 使用 starmap() Python 调用函数
- go - 模拟非接口函数
- javascript - 如何限制引导下拉列表可见项目数
- javascript - 如何只翻译一个html
- mit-scratch - 是否可以在 Scratch 中运行时停止功能(自定义块)?
- python - 连续读取 Json 日志文件并使用 Python 运行查询