1)将real(kind=8) alloctable::xx(:,:)写入moudule 2)在主程序use moudle 3)同在子程序allcoted(xx(bb,cc)),结束后释放空间就可以 |
vvt 发表于 2017-3-6 10:33 好的,学习了! |
1. 因为子程序内部的数组,在子程序返回的时候,会自动被 deallocate 2. 是的,你加了判断,就避免了重复分配。但是会有一个问题,如果你第二次想要分配的大小,和你第一次分配的不一样。 那么就会造成,你以为分配了,就不再进行分配。但是大小却不一样。 3. 所以,最佳的方法是,在合适的位置,对其进行 deallocate。 |
vvt 发表于 2017-3-6 10:08 谢谢版主回复! 我想着有两个解决方法,不知到对不对,希望您指点指点 1,我发现把real,allocatable 这几个声明语句写到子程序cal_tracer内部可以解决问题,不知到这样对不对? 2,将子程序内的allocate改为 if (.not. allocated()) then allocate() end if |
谢谢版主回复! 我想着有两个解决方法,不知到对不对,希望您指点指点 1,我发现把real,allocatable 这几个声明语句写到子程序cal_tracer内部可以解决问题,不知到这样对不对? 2,将子程序内的allocate改为 if (.not. allocated()) then allocate() end if |
这是动态数组多次分配了。如果你的 cal_tracer 函数被多次调用的话,就会这样。 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 14:50