程序接收信号SIGSEGV:分段故障 - 无效的存储器参考

时间:2014-10-01 07:07:49

标签: linux fortran gfortran

program height_sand
        implicit none
    integer tmax, nmax
    real  zmax, maxx
     parameter (nmax=200000)
    real  x1(nmax),y1(nmax),z1(nmax),teta
        !real d, zmax, xmax
    integer  t,ntot
    integer  i, j, id, tip(nmax)
    open(unit=1,file='vmdfile.xyz')
    open(unit=3,file='height.dat')
    ntot=3000
        tmax=51
        maxx=0
        zmax=0

      do t=1,tmax
          read(1,*)
          read(1,*)


      do i=1,ntot
         read(1,*)tip(id),x1(id),y1(id),z1(id)

          if (z1(id).gt.zmax) then
           zmax=z1(id)

        end if

         if (x1(id).gt.maxx) then
          maxx=x1(id)   
       end if

           end do

          teta=zmax/maxx
          write(3,*)t,zmax,teta
    end do


      !110 format(I8, f15.6)
    END

1 个答案:

答案 0 :(得分:1)

这一行

         read(1,*)tip(id),x1(id),y1(id),z1(id)

可能是您报告的错误的来源。在执行时id没有给出值。如果你假设它会自动设置为0,那么(a)你假设错了,(b)tip(0)无论如何都是一个无效的数组元素引用,因为Fortran索引从{{1}开始(除非你专门将它们设置为显示的代码没有的另一个起始值)。

我强烈怀疑你向我们展示了一个半生不熟的代码,因为循环控制变量(1tmax)没有在循环中使用。