我有一个迭代数组的程序,确定性地生成新的行向量,然后将其附加到数组中。
在每次迭代时,采用向量的范数,以确保它不是零向量。如果为零,则程序停止。
有一个错误,第三次迭代会导致向量变为零。
在寻找这个错误时,我用调试打印语句,print *,“here”,this_var等填充代码。其中一个打印语句(打印最新矢量的规范)修复了程序。
我不喜欢print语句。我也不喜欢我不明白发生了什么。
有没有人对打印声明为什么会影响它正在打印的东西有任何想法?
代码(约400行,很多评论)
答案 0 :(得分:3)
正如James在评论中指出的那样,这可能是由数组索引引起的。您应该尝试重新编译打开数组边界检查的代码(执行此操作的命令将根据您的编译器而有所不同)并运行该程序。
你是绝对正确的 - 像这样的阴险错误绝对令人抓狂。
答案 1 :(得分:1)
看起来像是因为访问超出范围而覆盖了你的内存。使用数组边界检查进行编译。这使程序运行速度变慢,但你可以找出内存违规。
答案 2 :(得分:0)
有一次,我发现与编译器或链接器有关的错误,其结果与此类似。有问题的代码在多个程序中是相同的,除了这个之外它们都有效。在这种情况下,所涉及的线是一个aritmetic if。当我将它转换为多个标准if if else语句时,它应该工作。这不是错误,但我必须把它放在那里 还必须加上蒂姆的回答。编译器选项是最重要的。
答案 3 :(得分:0)
你使用子程序吗?
有时你会覆盖子程序中的一些数据并且不会传播回来,但结果会丢失。
你在子程序调用中有正确的类型吗?
你是否使用意图进/出?
你使用固定尺寸吗?