fortran LAPACK例程中的分段错误

时间:2015-08-14 00:41:43

标签: segmentation-fault fortran gfortran lapack

我正在尝试使用fortran 95运行一个带LAPACK库的简单程序。我正在求解线性方程组:ol.table-list > li > div { display: table-cell; vertical-align: middle; }

Ax=B

A = [4 -2 3] [1 3 -4] [3 1 2] B=[ 1 -7 5] 是解决方案载体

解决方案

x

这是代码。我正在使用两个子例程:SGETRFSGETRS。第一个函数x = [-1 2 3] 计算矩阵的LU分解,第二个子程序求解方程组。

SGETRF

根据LAPACK文档SGETRF,就我而言,program main implicit none integer :: i,j,info1,info2 integer :: neqn ! number of equations real,dimension(3,3) :: coeff real,dimension (3,1) :: lhs real,dimension (3,1) :: ipiv neqn=3 coeff = reshape( (/4,1,3,-2,3,1,3,-4,2/),(/3,3/)) lhs = reshape ( (/1,-7,5/),(/3,1/) ) call SGETRF (neqn,1,coeff,neqn,ipiv,infO1) if (info1==0) then call SGETRS ('N',neqn,1,coeff,neqn,ipiv,lhs,neqn,info2) !Error else end if write (*,*) 'Answer: ' do j=1,neqn,1 write (*,100) lhs(j,1) 100 format (F12.5,' ,') end do write (*,100) (lhs) end program 我把程序编译为M=neqn=3, N=1, A=coeff, LDA=3 我收到错误:

gfortran main.f95 -o main -fcheck=all -llapack

第19行是Program received signal SIGSEGV: Segmentation fault - invalid memory reference. Backtrace for this error: #0 0x7F758C3B3777 #1 0x7F758C3B3D7E #2 0x7F758C00BD3F #3 0x7F758CA2F3EF #4 0x7F758C9BE8ED #5 0x400AE0 in MAIN__ at main.f95:19 Segmentation fault (core dumped) 我不明白为什么会有错误。有什么想法或意见吗?

2 个答案:

答案 0 :(得分:1)

您的错误是由SGETRF的第二个参数引起的。此参数是coeff的第二个维度,因此应为3neqn

答案 1 :(得分:0)

详细说明Stefan的正确答案,这是对代码的修改。我相信通过针对LAPACK规范仔细编程(例如, +-------------------------+ | id A B C dup_id | |-------------------------| | 1 1 1 1 1 | | 2 1 1 1 1 | | 3 1 1 1 1 | |-------------------------| | 4 2 2 2 4 | | 5 2 2 2 4 | | 6 2 2 2 4 | | 7 2 2 2 4 | |-------------------------| | 8 3 3 3 8 | | 9 3 3 3 8 | |-------------------------| | 10 4 4 4 10 | +-------------------------+ 数组应该是rank-1 ipiv)并避免这么多文字常量,可以消除一些错误的可能性:

Integer