1

我最近得到了一些在 Mac OS 上成功运行的 Fortran 代码。这段代码连同输入文件后来被发送给我进行编译。我精确地使用了相同的代码和相同的输入文件,但出现了“超出数组范围”的错误。我在 Windows XP 上使用 CVF 6.6。我想知道以下几点:

  1. 这是编译器还是操作系统问题?
  2. 我应该安排一个 Mac OS 来编译它们吗?
  3. 在互联网上浏览了这么多之后,我认为明智的做法是让我的数据“无格式”。但是当我的数据是时间序列时,我不知道如何做到这一点,时间在一列,电压在一列。
4

1 回答 1

1

错误消息array bounds exceeded总是(我认为)表明您的代码已尝试访问数组边界之外的数组元素,例如具有 24 个元素的数组中的元素 25。这只能在运行时发生,并且只有在编译时为数组边界检查设置了编译器选项时,您的编译器/运行时才会发现它;您的编译器文档会告诉您这些选项是什么。

错误消息应该附带一些更多信息,告诉您错误发生在程序中的哪个位置以及越界数组访问的索引。

鉴于您的源代码和输入数据是相同的,这怎么可能发生?由于您已经在 2 个不同的平台上编译了该程序,因此您的编译不可能完全相同,因此完全有可能在您的 Mac 和 Windows PC 上关闭了数组边界检查。

尽管访问了越界的数组元素,Fortran 程序显然可以成功执行。如果 24 中的数组元素 25 的内存地址包含一个有意义的值并且该地址在您的程序空间内,则计算可能会继续。它也可能是无用的,但你可以去很多年才能发现它。

我建议你回到 Mac,用数组边界检查重新编译,然后再次运行,看看会发生什么。

读取文件的例程也可能在 XP 和 Mac 上找到不同数量的值;我怀疑这可能是由不同的行结束字符引起的,即使输入文件末尾是否有换行符也是如此。也检查一下。

于 2013-02-12T11:34:32.543 回答