行列を逆にするサブルーチンを書いています。入力は行列A(n x n)、出力は行列invAです。サブルーチン内で、一時行列の「一時」次元(n x 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」の正しい値を取得できなかったのですか?