2

(在我发现问题是在我的代码的不同位置引起的之后,于 2021-09-06 13:30 CEST 编辑)

我正在编写一些代码(不是我自己的),它们使用自定义类型来处理动态整数数组。这种类型的一个实例通过例程之间的公共块传递。看起来这不能正常工作或按预期工作,因为数组在传递给新例程后采用不同的值。一个最小的示例如下所示:

implicit none
type intdynarr2
    sequence
    integer, pointer::i(:,:)
end type intdynarr2
type(intdynarr2):: my_array
integer j,k
common/carrays/my_array
allocate(my_array%i(1:10,1:10))
do j=1,10
  do k=1,10
    my_array%i(j,k)=j*k
  enddo
enddo
write(*,*) my_array%i
call printarr
end
      
subroutine printarr
    implicit none
    type intdynarr2
        sequence
        integer, pointer::i(:,:)
    end type intdynarr2
    type(intdynarr2):: my_array
    common/carrays/my_array
    write(*,*) my_array%i
end subroutine

在 8.2.0 版本中使用 gfortran 编译后的输出如下所示:

           1           2           3           4           5           6           7           8           9          10           2           4           6           8          10          12          14          16          18          20           3           6           9          12          15          18          21          24          27          30           4           8          12          16          20          24          28          32          36          40           5          10          15          20          25          30          35          40          45          50           6          12          18          24          30          36          42          48          54          60           7          14          21          28          35          42          49          56          63          70           8          16          24          32          40          48          56          64          72          80           9          18          27          36          45          54          63          72          81          90          10          20          30          40          50          60          70          80          90         100
           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1           1

虽然我期望它是:

           1           2           3           4           5           6           7           8           9          10           2           4           6           8          10          12          14          16          18          20           3           6           9          12          15          18          21          24          27          30           4           8          12          16          20          24          28          32          36          40           5          10          15          20          25          30          35          40          45          50           6          12          18          24          30          36          42          48          54          60           7          14          21          28          35          42          49          56          63          70           8          16          24          32          40          48          56          64          72          80           9          18          27          36          45          54          63          72          81          90          10          20          30          40          50          60          70          80          90         100
           1           2           3           4           5           6           7           8           9          10           2           4           6           8          10          12          14          16          18          20           3           6           9          12          15          18          21          24          27          30           4           8          12          16          20          24          28          32          36          40           5          10          15          20          25          30          35          40          45          50           6          12          18          24          30          36          42          48          54          60           7          14          21          28          35          42          49          56          63          70           8          16          24          32          40          48          56          64          72          80           9          18          27          36          45          54          63          72          81          90          10          20          30          40          50          60          70          80          90         100

谁能告诉我这里出了什么问题以及如何解决这个问题?

4

0 回答 0