与fortran 77子程序交互会导致"无效的内存访问"我在下面总结的代码错误:
subroutine mysub1()
parameter :: kk=22
real, dimension(KK) :: A
call F77SUB(A)
end
subroutine mysub2()
parameter, integer :: kk=22
real, dimension(:,:), allocatable :: A
integer :: jj
jj = 12
allocate(A(kk,jj))
call F77SUB(A(:,1)) ! ERROR: Invalid memory access
end
其中F77SUB是我试图使用的fortran子程序,它采用一维数组并写入它。在上面的代码中,mysub1
有效但mysub2
没有。
有人可以提出上面的问题,或者提供有关如何在F90和F77子程序之间实际传递数组参数的详细信息吗?我已经看到标量的实例被传递给F77子程序,这显然只是将标量的内存地址作为数组的开头。任何启蒙都会受到赞赏。
答案 0 :(得分:1)
评论太长了,但答案不太明确..
您发布的代码是crazee,尝试修复汇总代码是一项徒劳无功的任务,因此我不会花很长时间。以下是一些令人震惊的错误,请不要回答告诉我们您的“真实”代码中缺少错误。
F77SUB(A(:,1))
在调用子例程时语法错误,call F77SUB(A(:,1))
是正确的。intent
的过程参数。答案 1 :(得分:0)
我发现了问题。我宣称1D A是双精度而2D A是真实的。不知怎的,它让我把它们都传递给了F77例程而没有抱怨。