我最近得到了一些在Mac OS上成功运行的Fortran代码。此代码以及输入文件后来被发送给我以进行编译。我精确地使用了相同的代码和相同的输入文件,但出现了“超出数组边界”的错误。我在Windows XP上使用CVF 6.6。 我想知道以下事项:
答案 0 :(得分:1)
错误消息array bounds exceeded
总是(我认为)表明您的代码试图访问数组边界之外的数组元素,例如具有24个元素的数组中的元素25。这只能在运行时发生,并且编译器/运行时只会在编译时设置数组边界检查的编译器选项时才会发现它;您的编译器文档将告诉您这些选项是什么。
错误消息应附有更多信息,告诉您程序中错误发生的位置以及越界数组访问的索引。
鉴于您的源代码和输入数据相同,这是怎么发生的?由于您已经在两个不同的平台上编译了程序,因此您的编译不可能完全相同,因此完全可以在Mac上和Windows PC上关闭阵列边界检查。
尽管访问了越界数组元素,Fortran程序仍然可以成功执行。如果24中的数组元素25的存储器地址保持有意义的值并且地址在程序的空间内,则计算可能继续。它也可能没用,但你可以在找到它之前多年。
我建议您返回Mac,使用数组边界检查重新编译,然后再次运行,看看会发生什么。
读取文件的例程也可能在XP和Mac上找到不同数量的值;我怀疑这可能是由不同的行结束字符引起的,即使输入文件是否在结尾处有换行符也是如此。检查一下。