切片矩阵的输出错误

问题描述 投票:-1回答:1

我正在尝试为n * n矩阵编写一个非常简单的代码来生成切片矩阵。但是,当使用Geany和Gfortran运行时,我得到了错误的切片矩阵。

代码是:

program mat_slice

implicit none
integer, parameter:: n = 3
integer, dimension(n,n) :: mat
integer, dimension(n-1,n-1) :: slice
logical, dimension(n,n) :: mask
integer :: i,j
mat = reshape((/1,2,3,4,5,6,7,8,9/),(/n,n/))

print*, mat

mask = .true.
mask(i,:) = .false.
mask(:,j) = .false.

slice = reshape((pack(mat,mask)),(/n-1,n-1/))

do i  =  1,n-1
    do  j = 1,n-1
        print*, slice(i,j)
    end do
end do

结束程序mat_slice

输出为0 4 0 5

但是,当我在Jdoodle上运行相同的代码时,我得到了正确的答案。

输出是

1 4 2 5

任何想法将不胜感激。

fortran gfortran
1个回答
0
投票

您的值ij在首次使用时未定义

mask(i,:) = .false. 
mask(:,j) = .false.

因此您的程序无效。

可能值为0,程序访问数组的边界。始终首先使用所有调试检查和警告编译程序。在gfortran使用-g -fbacktrace -Wall -fcheck=all开始。有关更多信息,请参阅手册

© www.soinside.com 2019 - 2024. All rights reserved.