出现“分段错误”的错误

时间:2013-10-16 09:42:32

标签: fortran fortran90

我有一些写在文件4中的值,我需要它们再次调用以进行新的计算,但我在读取行中有一些问题“read(4,*)NNrow(I),Niz(I),NNbin(I) ,Nfi(I),NfiStdDev(I),NfiAvr(I),NMagbin(I),Nzup(I)“ 当我想运行代码我收到错误“发生分段错误”我怎么能再次使用这个文件?

                                 do j=1,nmax
                                    if (zb(iz,im,j).ne.0) then
              call Romberg (dix,dDistCa,zb(iz,im,j),zup(iz))                    !COMOVING DISTANCE
              Vmax=dix*S                                    !COMOVINF VOLUME
              fi=fi+1/Vmax                                    !LUMINOSITY FUNCTION
 write(2,'(i5,2x,f9.4,2x,f8.5,2x,3f14.10)')j,magbin,zbin,S,Vmax,dix
            endif

        enddo

            if (Nbin.ge.n_thresh) then
    Nrow=Nrow+1
write(4,'(3i7,2x,f25.8,2x,2f20.8,2x,f9.4,2x,f8.5)')Nrow,iz,Nbin,fi,fiStdDev,fiAvr,magbin,zup(iz)
            endif
              enddo loopmag

rewind(4)
close(4)


write(*,*)Nrow 
 open(4,file='luminosity_func_I.asc')

 allocate (fiStdDev2(Nrow),stat=ok)
 allocate (fi_expected(Nrow),stat=ok)
 allocate (DFI(Nrow),stat=ok)
 allocate (CHISQ(Nrow),stat=ok)
 ! Ln10=2.3025
 A=0.4*2.3025
            do I=1,Nrow        ! NDATA=NMAX
            write(*,*)I
                read (4,*) NNrow(I),Niz(I),NNbin(I),Nfi(I),NfiStdDev(I),NfiAvr(I),NMagbin(I),Nzup(I)

                  fiStdDev2(I)=1/NfiStdDev(I)*NfiStdDev(I)
            write(*,*)fiStdDev2(I)
                  fi_expected(I)=A*fi_star*10**(0.4*(alpha+1)*(M_star-NMagbin(I)))*exp(-10**(0.4*(M_star-NMagbin(I))))
                  DFI(I)=fi_expected(I)-NFI(I)
                  CHISQ(I)=DFI(I)*DFI(I)*fiStdDev2(I)
            END DO

1 个答案:

答案 0 :(得分:1)

据我所知,read声明可能有两件事出错:

  1. 您正在尝试将信息存储在数组之外,即i > size(<one of the arrays>)。您可以使用-fbounds-check gfortran-check bounds ifort来查看此内容。

  2. 从文件中读取时出现了问题:

    • 单位非常低,你可以访问一个保留单位 - 尝试1234之类的东西。另请参阅此帖子:segmentation error in linux for ansys
    • 您阅读超出文件末尾的内容
    • 没有足够的列可以从文件中读取
  3. 您可以将iostat=ierror放入read语句中,以检查在阅读时是否发生错误。ierror<0意味着您尝试读取超出文件末尾的内容,而ierror>0对应于读取文件时的错误。