Fortran Coder

查看: 6680|回复: 1
打印 上一主题 下一主题

[讨论] 关于可分配数组的,可能导致较难检查的错误的一个特性

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
10 点
跳转到指定楼层
楼主
发表于 2019-8-10 01:12:29 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
    program main
    implicit none
    integer::a(10),b(5)
    integer,allocatable::c(:)
    allocate(c(8))
    a=3
    b=2
    c=a    c=b*c
    end program main


代码如上
对于不可分配数组a,b, 当直接执行c=a*b时, 由于a,b大小不一致, 所以编译时会报错.
但是当c为可分配数组, 并且c与b大小不一致时, 却可以执行b*c这样的语句 (经过实验,c*b与b*c这样的语句,最终生成的数组的大小,与排在首位的数组一致), 并且不会抛出运行时错.
而且这一种处理方式无法通过手动为c分配空间进行解决, 但是这样的处理方式却有可能导致最终的计算结果存在一定的错误, 并且除了单步调试外, 可能没有很好的方法能检查出来这个地方.


这个问题应该可以在ivf2019和codeblocks 17.12附带的gfortran(我不确定具体版本)上重现.

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-7 09:31

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表