主题:程序运行出现奇怪问题
acely624
[专家分:50] 发布于 2010-07-26 21:35:00
本人使用cvf6.6版fortran console application做工程实现了一个循环次数较大的程序,但运行没有达到最大循环次数就结束了,且运行前后均未提示有任何问题及警告。
因程序较大,本人不方便帖出来。在此问下,有没可能是版本及工程问题?
回复列表 (共35个回复)
21 楼
yeg001 [专家分:14390] 发布于 2010-08-06 16:28:00
如果我没记错, cvf和ivf下一个变量被Allocate了一次, 被再次Allocate的话会出错的哦.
22 楼
gulley [专家分:10] 发布于 2010-08-06 18:35:00
在每次循环结束时,将数组DEALLOCATE呢?
楼主是否这样设置了?
23 楼
acely624 [专家分:50] 发布于 2010-08-08 10:04:00
[quote]如果真是循环那么多次,那就是内存资源耗尽导致的了。Allocate语句非常费内存,不适合多次调用![/quote]
程序运行时内存仅使用了40%左右,而且每隔一定时间会将链表释放掉
查看进程管理器,程序进程仅使用内存5M多
另外,如若是因为“Allocate语句非常费内存,不适合多次调用”,有没替代的办法?请告知,谢谢!
24 楼
acely624 [专家分:50] 发布于 2010-08-08 10:13:00
[quote]在每次循环结束时,将数组DEALLOCATE呢?
楼主是否这样设置了?[/quote]
每隔一定时间会将链表DEALLOCATE,然后重新生成链表
25 楼
acely624 [专家分:50] 发布于 2010-08-08 10:15:00
[quote]如果我没记错, cvf和ivf下一个变量被Allocate了一次, 被再次Allocate的话会出错的哦.[/quote]
不明白,创建链表都是要这样做的啊
26 楼
acely624 [专家分:50] 发布于 2010-08-09 20:09:00
单独利用ALLOCATE建立链表,发现内存+虚拟内存3G分配掉2.8G时程序仍然运行良好,之前的程序内存仅使用400--500M,因此可排除内存分配超额的问题
27 楼
cgl_lgs [专家分:21040] 发布于 2010-08-10 00:10:00
[quote]单独利用ALLOCATE建立链表,发现内存+虚拟内存3G分配掉2.8G时程序仍然运行良好,之前的程序内存仅使用400--500M,因此可排除内存分配超额的问题[/quote]
不是超额,而是有可能句柄用光了(可能性非常小)
或是另一种可能:你分配的内存空间因越界访问导致把其他分配的空间的保留区域冲掉,最终导致程序莫名退出。
28 楼
acely624 [专家分:50] 发布于 2010-08-10 17:04:00
[quote][quote]单独利用ALLOCATE建立链表,发现内存+虚拟内存3G分配掉2.8G时程序仍然运行良好,之前的程序内存仅使用400--500M,因此可排除内存分配超额的问题[/quote]
不是超额,而是有可能句柄用光了(可能性非常小)
或是另一种可能:你分配的内存空间因越界访问导致把其他分配的空间的保留区域冲掉,最终导致程序莫名退出。[/quote]
开机时句柄数8000~8500,程序运行中句柄一直未超过9500
“你分配的内存空间因越界访问导致把其他分配的空间的保留区域冲掉,最终导致程序莫名退出”,这个问题如何判断,如何修改程序来避免?
29 楼
cgl_lgs [专家分:21040] 发布于 2010-08-10 22:17:00
具体情况具体分析,靠自己的调试及分析能力了。
你可以把程序进行分块儿处理,这样就好办些了。
30 楼
wuyouyunyun [专家分:0] 发布于 2010-08-12 21:40:00
采用 integer*8 数据类型
我来回复