【问题标题】:Fortran-Program received signal SIGSEGV: Segmentation fault - invalid memory referenceFortran 程序收到信号 SIGSEGV:分段错误 - 无效的内存引用
【发布时间】:2020-05-20 17:55:02
【问题描述】:

程序接收信号SIGSEGV,分段错误 . qden.dat 文件是一个 30x30 矩阵,所以我不知道出了什么问题。

program poisson
 implicit none  
 integer :: ierror 
 integer :: ni,nj=30 ! input cell number in the x and y direct
 integer :: ii 
 real(16),allocatable :: q_den(:,:)

 integer :: lun_in


 allocate(q_den(0:ni+1,0:nj+1))

 ! initialize charge density
 q_den=0.0
open(newunit=lun_in,file='qden.dat',status='old',iostat=ierror)

! Read data into arrays
     do ii=1,30
        read(lun_in,*,iostat=ierror) q_den(1:30,ii)
     end do
 do ii=0,ni+1
    write(*,'(*(es16.4e2))') q_den(ii,:) 
 end do

 close(lun_in)

 deallocate(q_den)
 stop 0

end program poisson

感谢任何帮助。我很确定这应该只是一个小错字。

【问题讨论】:

  • 你认为integer :: ni,nj=30初始化ni吗? (它没有。)

标签: segmentation-fault fortran


【解决方案1】:

问题如下:

integer :: ni,nj=30

ni,nj=30 不指定 ni,它只为 nj 赋值。

改成

integer :: ni=30,nj=30

我会推荐

integer,parameter :: ni=30,nj=30

这确保了值 ni,nj 在程序过程中不能更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多