fortran指针数组与c语言数组,Fortran90:指针数组定义为指针数组(错误ifort 11.1?)...

这篇博客讨论了一个在Fortran90中使用指针数组遇到的问题,其中涉及到类型定义、内存分配和指针赋值。在ifort11.1编译器上出现段错误,但在其他版本如gfortran和ifort的其他版本中正常运行。作者怀疑这可能是编译器的bug,并提到当去掉一个特定的整数声明时,ifort11.1也能得到预期结果。文章探讨了这个问题是否符合Fortran90的标准以及如何解决编译器差异。
摘要由CSDN通过智能技术生成

问题:我可以在Fortran90数组中使用定义为指针的指针数组吗?

type string

character, pointer :: str(:)

end type

type(string), pointer :: arr(:)

问题: 我有代码(见下文),其ifort 11.1给出了最后写段错误。其他编译器,例如gfortran 4.6.3,ifort 11.1.072,12.0.1,...,工作没有问题

您可以将代码想象成模拟python append函数。

program test

implicit none

type string

integer, pointer :: key

character, pointer :: str(:)

end type

type(string), pointer :: arr(:), tmp(:)

allocate(arr(1))

allocate(arr(1)%str(1))

arr(1)%str(1) = 'A'

write(6,*) arr(1)%str(1)

! --------------------

tmp => arr

write(6,*) tmp(1)%str(1)

! --------------------

nullify(arr)

allocate(arr(2))

arr(1)%str => tmp(1)%str

write(6,*) arr(1)%str(1)

end program

预期结果是: 甲 甲 甲

ifort 11.1给出在最后一行段故障。现在来了奇怪的事情。如果你注释掉字符串类型的整数声明,你也会在ifort 11.1中得到预期的结果。

这是编译器问题还是我使用非标准的Fortran90结构?

2012-07-10

Stano

+0

它可能是一个编译器错误,如果它适用于'11.1.072',但不适用于早期版本的'11.1'。 –

2012-07-10 08:52:41

+0

它也适用于11.0。但通常我对编译器业务的人比对自己的能力更加信任:)。 –

2012-07-10 09:13:04

+1

我总是向英特尔技术支持部门报告可疑的编译器问题(当然,当它是英特尔编译器时)。我发现它们比识别产品中的错误更好。当然,在这种情况下,他们可能会回答'是的,那是编译器版本中的一个bug,现在已经修复了。 –

2012-07-10 10:03:22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值