回 帖 发 新 帖 刷新版面

主题:[讨论]大家有没有遇到这个问题呢?请大侠 们帮帮忙...

最近写了个比较大型的程序,调试运行都能成功,但就是每次运行时,程序只能迭代运行几步(我的程序每迭代一步大概需要半小时左右),然后程序就自动断掉了,最后显示的大概是这么一句“press any key to continue”。后来我没办法了,只好在程序中把每次迭代计算步的关键数据存为文件,等它断掉后,继续运行计算,这样的处理能够接着断点继续计算。哎...这个问题都困扰我好长时间了,一直都没得到解决。各位大虾们有没有遇到过这种类似的问题啊?这种问题怎么调试和处理才能让它一直能够迭代计算直到达到相应的收敛计算精度?

回复列表 (共28个回复)

沙发

press any key to continue 可以是正常计算结束, 也可以是某些地方出错(出错一般会有提示)或者遇到stop.
只能运行几步就退出, 那就先冲退出条件那里开始查, 为什么那么快就到达退出条件.
个人看法, 仅供参考.

板凳

有没有可能是什么地方设置了运行时间?纯属猜测

3 楼

您好!非常感谢您来关注我的问题。程序中出错的地方我也查过。在我的程序中有三个大型的三维矩阵计算子程序。程序每次就是在这三个计算点的其中一个点上退出的。但是我感到纳闷的是,头几次的循环都能好好地运行,可就是运行几步后就退出了。然后我重新点开程序接着退出的那个数据点迭代计算又能算上几步,然后又会断掉,如此反复。我试着这样算过,如此反复几次的计算也能达到所需要的收敛计算精度。但就是中途有中断计算的麻烦,需要人为的继续运行程序,挺麻烦的,实在找不到问题出在哪了。您能给我一些建议吗?

4 楼

由于程序每个迭代步需要半个小时左右的时间,这还是需要在非常好的电脑上才有的速度。所以在程序中我调用了cpu_time和date_and_time来记录每个迭代步中的关键处所耗的时间。这两个语句在程序中不会有什么问题吧?非常感谢您的建议,我试试去掉这两个语句再运行计算一个看看...

5 楼

1。先用小型的矩阵,把程序调通了以后再用实际数据计算
2。是不是随着迭代步数的增加,内存占用逐渐增多,超过32位程序的限制了?

6 楼

非常感谢您的建议,您的这两条建议对我很有帮助,非常感谢!明天按照您的建议试着先计算一个比较小的算例来试试。呵呵。。。

7 楼

您好!我在主程序中用了allocate语句设置了动态数组,在程序的一开始我先allocate数组,然后在主程序执行完后,end programme的前面deallocate数组。请问这样的设置是不是有可能导致程序迭代计算时动态数组的内存在每迭代一步时就使内存暂用率增大一点?如果是这样的话,我该怎么设置呢?

8 楼

计算时没有再申请新的内存就不会在再增加内存使用率了.

9 楼

那您觉得我这个问题出在哪里了呢?我实在找不到原因了,您能帮我参考下吗?万分感谢...

10 楼

5楼说得很对, 你的程序一次要半个小时, 那样无法调试. 先把规模弄小方便你调试.
既然是调试就要找退出位置. 如果只是press any key to continue 而没有其他出特别错信息, 我感觉是遇到stop了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册