我正在编写一个子程序来反转矩阵。输入是矩阵 A(n x n),输出是矩阵 invA。在子例程中,我想声明一个临时矩阵“temp”维度(n 乘 2n),但声明引起了奇怪的问题。在这一行之后(我在下面强调),我还声明了整数 i 和 j 并初始化它们 i = 0,j = 0。但是调试 i 和 j 的这些值,它显示 i = 1572472 !诡异的!!!!!如果我删除代码行“real, dimension (m, m * 2) :: temp”,那么一切都很好。任何人都可以为我解释为什么?
提前致谢。(我是 .Net 中的一名优秀程序员,现在正在学习 Fortran——但这让我发疯!)
program weird
implicit none
Real, Dimension (2,2)::B
Real, Dimension (2,2) ::B_inversed
B(1,1) = 0.6
B(1,2) = 0.8
B(2,1) = -0.8
B(2,2) = 0.6
Call InverseMatrix(B,B_inversed)
contains
subroutine InverseMatrix(A, invA)
implicit none
real, intent(in), dimension (:,:) :: A
real, intent(out), dimension (size(a,1),size(a,2)) :: invA
real, dimension (size(a,1),2*size(a,2)) :: temp <------THIS LINE CAUSES PROBLEMS
integer:: i,j
i = 0 !<-------
j = 0 !<-------DEBUG line stops here, showing i = 3734648 !VERY WEIRD!!!!!
invA(1,1) =0.0
invA(1,2) =0.0
invA(2,1) =0.0
invA(2,2) =0.0
end subroutine
end program
这是一个非常直接的 FORTRAN 代码,但为什么我没有得到正确的 'i' 值?