【发布时间】:2016-12-11 16:02:35
【问题描述】:
在这里,我知道 A 只是一个长度为 170 的一维数组。
subroutine gonewrong(q,e,A)
implicit none
integer, dimension(:) :: q
integer, dimension(:,:), intent(in) :: e
integer, dimension(size(e,1)*2), intent(out) :: A
print *, A(2)
end subroutine gonewrong
例如,当我尝试查找 A(2) 时,它给了我一个分段错误! e 具有维度 (85,2)。
会不会是因为我在用于编译它的程序中将 A 声明为可分配数组?
我使用的程序:
program prog_1
use module_1
implicit none
integer::qm,a,b,c
integer,allocatable,dimension(:)::q
integer,allocatable,dimension(:,:)::e
!integer, dimension(size(e,1)*2) :: A
a = 5
b = 3
c = 10
allocate(q(a+c))
allocate(e(a+b*c,2))
call subr1(a,b,c,qm,q,e) !Outputs are qm,q and e.
call gonewrong(q,e,A) !gonewrong takes q and e as arguments
end program prog_1
【问题讨论】:
-
您必须显示更多代码!它应该是可编译的。我们要看看你是怎么调用它的,程序怎么看接口的。子程序是否在模块中?应该是!
-
@VladimirF 是的,它在一个模块中并编译。我已经编辑了。
-
等等,你怎么能在程序中将
A作为一个标量整数,然后将它传递给需要一个数组的子程序?那怎么可能编译?显示完整代码、整个模块、您使用的命令。使用一些调试标志进行编译 (-g -fcheck=all -Wall)。 -
@VladimirF 嗨,弗拉基米尔。好像你在我最后一次编辑之前看到了这篇文章。我使用的命令是 gfortran -o test.exe module_1.f90 prog_1.f90 -llapack - 我会向您展示完整的模块,但它相当长!而且我认为只有通过说明输出的尺寸来缩短它才会有帮助——毕竟,我调用的第一个子程序是独立工作的。
-
a和A是一回事!!!
标签: arrays indexing segmentation-fault fortran