Fortran Coder

查看: 7125|回复: 4
打印 上一主题 下一主题

[求助] 使用动态数组的问题

[复制链接]

16

帖子

3

主题

0

精华

入门

F 币
96 元
贡献
57 点
跳转到指定楼层
楼主
发表于 2015-5-9 22:50:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program composite
      implicit none
       external xigema
          integer,parameter::con=192,xx=145,xy=37,year=64,k=64
      real x(xx,xy,con),xb(xx,xy,year),xigema,xbb(xx,xy)
      integer it,ix,iy,i
      real jp1(k),jp2(k)
      integer j1,j2,j3,j4,j5,j6,j7,j8,j9
      real,allocatable::all_big(:,:,:),all_small(:,:,:),Ab_Is(:,:,:),As_Ib(:,:,:)
      real,allocatable::As(:,:,:),Ab(:,:,:),Ib(:,:,:),Is(:,:,:),no(:,:,:)
      open(10,file='d:\biye\pr.grd',form='binary')   
      do it=1,con
      read(10)((x(ix,iy,it),ix=1,xx),iy=1,xy)
      enddo     
     print*,'finish read 1'
!!!!!!!!!!!!!!!!!!!!!!求64年冬季平均!!!!!!!!!!!!!!!!!!
           do iy=1,xy
             do ix=1,xx
                do it=1,con,3
                xb(ix,iy,(it+2)/3)=(x(ix,iy,it)+x(ix,iy,it+1)+x(ix,iy,it+2))/3. !64年冬季平均    
           enddo 
         enddo
           enddo
    print*,'finish 64ave'
!!!!!!!!!!!!!!!!!!!!!样本平均!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       do iy=1,xy
           do ix=1,xx
            xbb(ix,iy)=xigema(xb(ix,iy,1:year),year)/year !样本总平均
           enddo
       enddo
    print*,'finish all ave'
!!!!!!!!!!!!!!!!!!!!!选择年份放入特定数组!!!!!!!!!!!!!!!!!!!!!!!!!!   
    open(10,file='d:/biye/p1/pva1p.txt') 
    read(10,*)(jp1(i),i=1,k)
    close(10)
    open(11,file='d:/biye/p1/pvi1p.txt') 
    read(11,*)(jp2(i),i=1,k)
    close(11)
    j1=0;j2=0;j3=0;j4=0;j5=0;j6=0;j7=0;j8=0;j9=0

    do i=1,k
        if(jp1(i)>0.5.and.jp2(i)>0.5)then
             j1=j1+1
             allocate(all_big(xx,xy,j1))
             all_big(xx,xy,j1)=xb(xx,xy,i)
        else if(jp1(i)<-0.5.and.jp2(i)<-0.5)then
             j2=j2+1
             allocate(all_small(xx,xy,j2))
            all_small(xx,xy,j2)=xb(xx,xy,i)
        else if(jp1(i)>0.5.and.jp2(i)<-0.5)then
            j3=j3+1
            allocate(Ab_Is(xx,xy,j3))
            Ab_Is(xx,xy,j3)=xb(xx,xy,i)
        else if(jp1(i)<-0.5.and.jp2(i)>0.5)then
            j4=j4+1
            allocate(As_Ib(xx,xy,j4))
            As_Ib(xx,xy,j4)=xb(xx,xy,i)
        else if(jp1(i)<-0.5.and.-0.5<jp2(i)<0.5)then
            j5=j5+1
            !allocate(As(xx,xy,j5))!!!!!!!!!!!!!!!!!!!!!!!!!!出问题的地方
            As(xx,xy,j5)=xb(xx,xy,i)
        else if(jp1(i)>0.5.and.-0.5<jp2(i)<0.5)then
            j6=j6+1
            allocate(Ab(xx,xy,j6))
            Ab(xx,xy,j6)=xb(xx,xy,i)
        else if(-0.5<jp1(i)<0.5.and.jp2(i)<-0.5)then
            j7=j7+1
            allocate(Is(xx,xy,j7))
            Is(xx,xy,j7)=xb(xx,xy,i)
        else if(-0.5<jp1(i)<0.5.and.jp2(i)>0.5)then
            j8=j8+1
            allocate(Ib(xx,xy,j8))
            Ib(xx,xy,j8)=xb(xx,xy,i)
        else 
            j9=j9+1
            allocate(no(xx,xy,j9))
            no(xx,xy,j9)=xb(xx,xy,i)
        endif
    enddo
    write(*,*)j1,j2,j3,j4,j5,j6,j7,j8,j9
    !deallocate(all_big(:,:,:),all_small(:,:,:),Ab_Is(:,:,:),As_Ib(:,:,:)&
    !             &As(:,:,:),Ab(:,:,:),Ib(:,:,:),Is(:,:,:),no(:,:,:))
   print*,'finish choose'
   pause
end

出现的问题图附图,谢谢各位大神
使用的数据太大,传不上来

QQ截图20150509223834.png (19.35 KB, 下载次数: 270)

不加出问题的语句

不加出问题的语句

QQ截图20150509223856.png (22.68 KB, 下载次数: 319)

加入出问题的语句

加入出问题的语句
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2015-5-10 00:58:09 来自移动端 | 只看该作者
循环分配数组,但是没有释放。则第二次循环时出错,因为第一次分配的未释放

16

帖子

3

主题

0

精华

入门

F 币
96 元
贡献
57 点
板凳
 楼主| 发表于 2015-5-10 08:22:39 | 只看该作者
好,谢谢您,我明白什么意思了。主要我想实现每进行一次if语句就给特定数组增加一维循环,这个用动态数组可以实现么。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2015-5-10 08:58:41 | 只看该作者
这是数据结构的问题了。常见的思路有两种:
第一:
1. 先执行一遍,不进行大量的计算或操作,只获得数组的大小(例如根据文件的行数等信息判断)
2. 根据第一步的结果分配数组
3. 再执行一遍,实际计算。
第二:
使用链表等结构

16

帖子

3

主题

0

精华

入门

F 币
96 元
贡献
57 点
5#
 楼主| 发表于 2015-5-10 10:26:49 | 只看该作者
vvt 发表于 2015-5-10 08:58
这是数据结构的问题了。常见的思路有两种:
第一:
1. 先执行一遍,不进行大量的计算或操作,只获得数组的 ...

问题解决了 谢谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 00:54

Powered by Tencent X3.4

© 2013-2024 Tencent

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