title: "Segmentation Fault (core dumped)" error in Fortran gfortran linux
body: <p>I am creating a program which will analyse a file .fits in a directory and then it will create another file .txt in another directory. It is just a converter.</p>
  
  <p>When I tried to execute the program (compiling is OK) it gives me an error message:</p>
  
  <p>Program received signal SIGSEGV: Segmentation fault - invalid memory reference.</p>
  
  <p>Backtrace for this error:
  0  0x7FC5ADB1C117
  1  0x7FC5ADB1C6F4
  2  0x7FC5AD46C0AF
  3  0x44E704 in ffthdu at fitscore.c:6893
  4  0x405101 in MAIN__ at Codigo.f90:?
  Segmentation fault (core dumped)</p>
  
  <p>And there is another information: when I delete a stretch of the program which does the "write to the new .txt converter file" part, the program goes OK and it reads the entire .fits file! Here is this stretch:</p>
  
  <pre><code>arq='spec-1.txt'
  open (29,file=arq,status='unknown')
  write(29,*) '  l(n)                      fa(n)'
  do n=1,naxes
     write(29,*) l(n), fa(n)
  end do
  </code></pre>
  
  <p>I have declared the variable "arq" as a character and everything is OK. When I delete this stretch the segmentation fault does not appear any more, but I do not know what to do now because I need to pass the information to this .txt! And the "arq" string is not complete because I am just testing now, later I will add the entire directory.</p>
  
  <p>And here is the full program, I am using "gfortran Codigo.f90 -o TESTE -Lcfitsio -lcfitsio" to compile it:</p>
  
  <pre><code>implicit none
  
  integer largo,status,hdnum,n,keysexist,keysadd,bitpix,naxis
  integer naxes,readwrite,blocksize
  integer i,j,k
  integer iF(3),iT(3),iw(3),iwe,il,ib,jb,iFold,iFoldmin(3)
  integer iFoldmax(3),iFoldopt(3)
  integer iMiMy,iMo,Tymin,Tymax,Timin,Timax,Tyoung(3),Tint(3),Told
  integer i912,i45000,Tyin,Tiin,nrows,ncols,datacode,repeat,width
  integer nlam_ext
  integer fKD,fKK,fKKD
  parameter (nlam_ext = 1145)
  CHARACTER NAMECH*256,name2*256,alibi*1000,card*80,code*14
  CHARACTER arq*1000
  CHARACTER name(7)*256,namein*256,nebname*256,nameout*256
  CHARACTER nameindva*256,nameoutdva*256,mid(3)*4,line*1000
  real fa(10000),fcs(10000),noiz(10000),mask(10000)
  real*8 l(10000)
  real*8 w_ext(nlam_ext),alam_ext(nlam_ext)
  REAL*8 F(3,7),T(3,35),Fl(3,7,36,6900),w(3,6900),y(6900),ye(6900)
  REAL*8 SN(6900),xe(6900)
  real*8 CHISQU,CHISQUmin(3),CHISQUup,CHISQUdown,CHISQUmid,nf,nfup
  real*8 nfdown,nfmid,nfopt(3)
  real*8 t4020,y4020,i4020,o4020,t4860,y4860,i4860,o4860
  real*8 xd(10000),yd(10000),absorb,ebminv,ke,redshift
  real*8 xf(10000),yf(10000),yp(10000)
  real*8 x(6900)
  real*8 flueks(10000),extcurve(10000)
  real*8 xg,yg(10000),x2,y2(10000)
  REAL*8 sng,ewa,ewb,ewg,hha,hhb,oldage(3)
  REAL*8 Mo(9),MiMy(9),Myoung,Mint,Mold,Myopt(3),Miopt(3),Moopt(3)
  REAL*8 Fyoung,Fint,Fold(7),Noise
  real*8 a,b,c, plyus,minus,xx,nebemm(6900),yy(6900)
  real*8 Flyoung(6900),Flint(6900),Flold(6900)
  real*8 ha,Oiii4959,Oiii5007,Nii,Nii2,Sii6717,Sii6731,Oii3727,Hei
  real*8 hhg,hg,Oiii4363,Oii7319,Oii7330,Nii6548,Nii6584
  real*8 R23,R3,P,XNII,xis,yps,O3N2,R,Z,k0,k1,k2,q,logq
  real*8 OHNII,OHZ,OHMcG,OHP,OHKD,I2lOH,OHKK
  real*8 OHKKD,OHKKbe,OHPPN2,OHPPO3N2,OHP05,I2lOHbef
  logical anynull
    ebminv = 0.
  namech='/home/matheus/Desktop/IC/Spectra/Elliptical/spec-0266-51602-0467.fits'
  write(6,*)namech
  readwrite=0
  status=0
  call ftopen(17,namech,readwrite,blocksize,status)
  call ftghsp(17,keysexist,keysadd,status)
  do n=1,keysexist
    call ftgrec(17,n,card,status)
    if (card(1:9)=='CRVAL1  =') then
      read(card,'(a9,e21.14)')alibi,a
    endif
    if (card(1:6)=='NAXIS1') then
      read(card,'(a9,i21)')alibi,
     endif
    if (card(1:6)=='Z     ') then
      read(card,'(a9,e21.14)')alibi,redshift
    endif
    if (card(1:6)=='SN_G  ') then
      read(card,'(a9,e21.14)')alibi,sng 
    endif
  enddo
  l(1)=10.**a/(1.+redshift)
  l(naxes)=10.**(a+0.0001*float(naxes-1))/(1.+redshift)
    do n=1,naxes
    l(n)=10.**(a+0.0001*float(n-1))
  enddo
   call ftthdu(17,hdnum,status)
  call ftgidt(17,bitpix,status)
  call ftgtcl(17,1,datacode,repeat,width,status)
  call ftgpve(17,1,1,naxes,0.,fa,anynull,status)
  call ftgpve(17,1,naxes+1,naxes,0.,fcs,anynull,status)
  call ftgpve(17,1,2*naxes+1,naxes,0.,noiz,anynull,status)
  call ftgpve(17,1,3*naxes+1,naxes,0.,mask,anynull,status)
  call ftclos(17,status) 
  write(6,*)'spectra read in',l(1),l(naxes)
  arq='spec-1.txt'
  open (29,file=arq,status='unknown')
  write(29,*) '  l(n)','                      fa(n)'
  do n=1,naxes
     write(29,*) l(n), fa(n)
  end do
  
  
   close(25)
  write(6,*)
  write(6,'(a)')'Justice is done'
   end
  </code></pre>
  
  <hr>
  
  <p>Actually the error happens because it gives to naxes always a zero value!</p>