Fortran调试print语句会影响程序流

时间:2010-08-12 13:47:24

标签: multidimensional-array printing fortran fortran90

我有一个迭代数组的程序,确定性地生成新的行向量,然后将其附加到数组中。

在每次迭代时,采用向量的范数,以确保它不是零向量。如果为零,则程序停止。

有一个错误,第三次迭代会导致向量变为零。

在寻找这个错误时,我用调试打印语句,print *,“here”,this_var等填充代码。其中一个打印语句(打印最新矢量的规范)修复了程序。

我不喜欢print语句。我也不喜欢我不明白发生了什么。

有没有人对打印声明为什么会影响它正在打印的东西有任何想法?

代码(约400行,很多评论)

4 个答案:

答案 0 :(得分:3)

正如James在评论中指出的那样,这可能是由数组索引引起的。您应该尝试重新编译打开数组边界检查的代码(执行此操作的命令将根据您的编译器而有所不同)并运行该程序。

你是绝对正确的 - 像这样的阴险错误绝对令人抓狂。

答案 1 :(得分:1)

看起来像是因为访问超出范围而覆盖了你的内存。使用数组边界检查进行编译。这使程序运行速度变慢,但你可以找出内存违规。

答案 2 :(得分:0)

有一次,我发现与编译器或链接器有关的错误,其结果与此类似。有问题的代码在多个程序中是相同的,除了这个之外它们都有效。在这种情况下,所涉及的线是一个aritmetic if。当我将它转换为多个标准if if else语句时,它应该工作。这不是错误,但我必须把它放在那里 还必须加上蒂姆的回答。编译器选项是最重要的。

答案 3 :(得分:0)

你使用子程序吗?

有时你会覆盖子程序中的一些数据并且不会传播回来,但结果会丢失。

你在子程序调用中有正确的类型吗?

你是否使用意图进/出?

你使用固定尺寸吗?