Fortran Coder

楼主: wxy
打印 上一主题 下一主题

[求助] 动态数组内存问题

[复制链接]

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

11#
发表于 2017-9-16 13:57:40 | 只看该作者
wxy 发表于 2017-9-16 13:11
不好意思刚看到 非常感谢 ,我还是不太明白这个报错是什么意思,为甚末之前将deallocate放在下一个do循环 ...

(1) 为甚末之前将deallocate放在下一个do循环之前就会报错,放在end program 之前就没事
DEALLOCATE(site2, lonx, laty)之後, 尚未再次ALLOCATE(site2(...), lonx(...), laty(...))之前, 不得access "site2, lonx, laty"等arrays

(2) '/=,.or.'和‘==,.and.’这里有点转不过来
[Fortran] 纯文本查看 复制代码
DO i = 1, m
  IF( a /= b ) CYCLE
  ... ! do something for (a==b)
END DO

or,

DO i = 1, m
  IF( a == b ) THEN
    ... ! do something for (a==b)
  END IF
END DO


(3) 可嘗試:
[Fortran] 纯文本查看 复制代码
    REWIND( UNIT=11 )
    mm = 0
    DO i = 1, m
      mm = mm + 1
      READ(11,*) site1(mm), lat(mm), lon(mm), h(mm), year(mm), month(mm), day(mm), ave, tmax(mm), tmin(mm)
      IF( year(mm)/=iyear .OR. month(mm)/=imonth .OR. &
          tmax(mm)==3270.0 .OR. tmax(mm)==3276.6 .OR. tmin(mm)==3270.0 .OR. tmin(mm)==3276.6 ) mm = mm - 1
    END DO
    CLOSE( UNIT=11 )

    WHERE( h(1:mm) >= 100000.0 ) h(1:mm) = h(1:mm) - 100000.0
    h   (1:mm) = h   (1:mm)*0.1
    tmax(1:mm) = tmax(1:mm)*0.1
    tmin(1:mm) = tmin(1:mm)*0.1
    lon (1:mm) = lon (1:mm)/100.0
    lat (1:mm) = lat (1:mm)/100.0

67

帖子

16

主题

0

精华

专家

F 币
275 元
贡献
201 点
12#
 楼主| 发表于 2017-9-16 16:44:24 | 只看该作者
chiangtp 发表于 2017-9-16 13:57
(1) 为甚末之前将deallocate放在下一个do循环之前就会报错,放在end program 之前就没事
DEALLOCATE(site ...

嗯嗯 明白了 非常感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-20 17:13

Powered by Tencent X3.4

© 2013-2024 Tencent

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