1

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

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

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

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

我不喜欢打印声明。我也不喜欢这样,我不明白发生了什么。

有没有人知道为什么打印语句会影响它正在打印的东西?

可用代码(约 400 行,大量注释)

4

4 回答 4

3

正如詹姆斯在评论中指出的那样,这可能是由数组索引引起的。您应该尝试在启用数组边界检查的情况下重新编译代码(执行此操作的命令会因您的编译器而异)并运行程序。

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

于 2010-08-12T18:30:19.987 回答
1

由于访问越界,您似乎覆盖了您的记忆。使用数组边界检查进行编译。这会使程序运行速度变慢,但您可以找出内存违规。

于 2010-08-14T19:33:23.080 回答
0

有一次,我发现一个与编译器或链接器有关的错误,其结果与此类似。有问题的代码行在多个程序中是相同的,除了这个之外它们都可以工作。在这种情况下,所讨论的行是一个算术如果。当我将它转换为多个标准 if then else 语句时,它可以正常工作。这是极不可能的错误,但我必须把它放在那里。
还必须对蒂姆的回答加分。编译器选项是最重要的。

于 2010-08-12T19:00:06.370 回答
0

你使用子程序吗?

有时您在子例程中覆盖了一些数据并且它不会被传播回来,但是结果会丢失。

您在子例程调用中有正确的类型吗?

您是否使用意图输入/输出?

你使用固定尺寸吗?

于 2010-08-15T16:24:02.123 回答