我正在尝试为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
任何想法将不胜感激。
您的值i
和j
在首次使用时未定义
mask(i,:) = .false.
mask(:,j) = .false.
因此您的程序无效。
可能值为0,程序访问数组的边界。始终首先使用所有调试检查和警告编译程序。在gfortran使用-g -fbacktrace -Wall -fcheck=all
开始。有关更多信息,请参阅手册