以文本方式查看主题

-  Fortran中文网  (http://fortran.cn/bbs/index.asp)
--  Fortran语言开发经验交流  (http://fortran.cn/bbs/list.asp?boardid=3)
----  程序运行出现奇怪问题  (http://fortran.cn/bbs/dispbbs.asp?boardid=3&id=2066)

--  作者:acely624
--  发布时间:2010/8/11 10:43:23

--  程序运行出现奇怪问题
本人使用cvf6.6版fortran console application做工程实现了一个循环次数较大的程序,但运行没有达到最大循环次数就结束了,且运行前后均未提示有任何问题及警告。

调试表明:

问题出现在下面这一段上

        DR=4D0*R

        LLF=DINT((X0(I)-DR)/C)          

        LRG=DINT((X0(I)+DR)/C)

        LFR=DINT((Y0(I)-DR)/C)

        LBA=DINT((Y0(I)+DR)/C)

        IF(LBA.GE.IDY) LBA=IDY-1

        IF(LRG.GE.IDX) LRG=IDX-1

        IF(LFR.LT.0) LFR=0

        IF(LLF.LT.0) LLF=0

            DO LX=LLF,LRG

                DO LY=LFR,LBA

                    IB=LY*IDX+LX+1

                    J=NCL(IB)

      

                    IF(J.LE.0) CYCLE

                    IF(I.LE.J) CYCLE

                    ALLOCATE(CTP)

                    CTP%LPP=J

                    CTP%NEXTP=>LCP(I)%ENDP

                    LCP(I)%ENDP=>CTP

                END DO

            END DO

进一步调试,发现问题出现在这句上:ALLOCATE(CTP)

程序段是大循环的一部分,大循环设定循环次数10 000 000次,在运行了4146380次后,程序在ALLOCATE(CTP)此句结束大循环并终止程序,且无任何错误提示

程序运行时,cpu使用率50%-60%,内存使用了400M左右,其中该程序使用了50M,且每隔一定时间会将链表释放掉;开机时句柄数8000~8500,程序运行中句柄一直未超过9500

电脑配置:cpu双核1.8G,内存1G

测试:用ALLOCATE建立链表,发现内存+虚拟内存3G分配掉2.8G时程序仍然运行良好,之前的程序内存仅使用400--500M,因此可排除内存分配超额的问题  


--  作者:acely624
--  发布时间:2010/8/12 16:03:30

--  
自己占沙发,跪求各位不吝赐教!!
--  作者:大胆想
--  发布时间:2011/4/10 19:08:20

--  
每步循环都写个信息出来,看在哪结束的,再找原因
--  作者:tsz2008
--  发布时间:2011/5/6 14:19:40

--  

首先我告诉你,单个循环可达到超过10^9次,所以如你所说不是这个的问题。

问题是这一个语句:ALLOCATE(CTP)

这里动态分配的是一个数组CTP,请把它的大小写出来。

正确定如:ALLOCATE(CTP(100)) !如果要CTP是一个一维数组。

或者ALLOCATE(CTP(num))       !num是一个已经赋过值的整型变量。


--  作者:luo2510764
--  发布时间:2011/10/6 10:48:54

--  
顶楼上
京ICP备05056801号