Fortran 90/95中的阵列尺寸过剩

时间:2014-04-09 08:59:04

标签: fortran90

我非常好奇如何打印以下第3行或者至少为什么它不是垃圾值:

PROGRAM b
    INTEGER:: A(2,2) = reshape((/1,2,3,4/),(/2,2/))

    PRINT*, A(1,:)
    PRINT*, A(2,:)
    PRINT*, A(3,:)  
END PROGRAM b

我的结果是:

       1           3
       2           4
       3       66825

我真的很感谢你的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你的66825是垃圾值!即使你只有0,它仍然是一个未定义的行为,可能导致糟糕的结果或崩溃您的程序(甚至启动WWIII)。不要这样做。使用编译器提供的功能来检查数组边界和其他类似的东西:

gfortran -fcheck=all

ifort -check

等等。

您还可以在Linux上使用valgrind来查看未定义的值以及内存中无效的读写操作。