title: How to find a problem in a C program : Program received signal SIGSEGV, Segmentation fault
body: <p>I have a problem with a C program. It was working before I made some changes (from define do var declarations). 
  Now: </p>
  
  <ul>
  <li>it compiles without errors using: <code>gcc m.c -lm -Wall -march=native</code></li>
  <li>has a run-time error: Segmentation fault</li>
  </ul>
  
  <p>So I tried to find a problem using gdb. Now I know more:</p>
  
  <pre><code>Program received signal SIGSEGV, Segmentation fault.
  0x0000000000400bbb in GivePeriod (Cx=-0,75, Cy=-0, Iteration_Max=650000, 
      precision=0,00033329999999999997) at m.c:137
  137    orbit[0][0]=0.0;
  </code></pre>
  
  <p>The problem is in function (which code was not changed), code below.</p>
  
  <p>How can I find the problem?</p>
  
  <p>gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9) </p>
  
  <pre><code>/*-------------------------------*/
  // this function is based on program:
  // Program MANCHAOS.BAS  
  // http://sprott.physics.wisc.edu/chaos/manchaos.bas
  // (c) 1997 by J. C. Sprott 
  //
  int GivePeriod(double Cx,double Cy, int Iteration_Max, double precision)
  {  
   double Zx2, Zy2, /* Zx2=Zx*Zx;  Zy2=Zy*Zy  */
       ZPrevieousX,ZPrevieousY,
       ZNextX,ZNextY;
     int Iteration,
    I;  
  double orbit[Iteration_Max+1][2]; /* array elements are numbered from 0 to   length-1 */    
   /* starting point is critical point  */
  ZPrevieousX=0.0;
  ZPrevieousY=0.0;
  orbit[0][0]=0.0;
  orbit[0][1]=0.0;  
  Zx2=ZPrevieousX*ZPrevieousX;
  Zy2=ZPrevieousY*ZPrevieousY;
  /* iterate and save points for analysis */
  for (Iteration=1;Iteration&lt;Iteration_Max+1 ;Iteration++)
      {
          ZNextY=2*ZPrevieousX*ZPrevieousY + Cy;
          ZNextX=Zx2-Zy2 +Cx;
          Zx2=ZNextX*ZNextX;
          Zy2=ZNextY*ZNextY;
          if ((Zx2+Zy2)&gt;ER2) return 0; /* basin of atraction to infinity */
          //if   (SameComplexValue(ZPrevieousX,ZPrevieousY,ZNextX,ZNextY,precision))
          //   return 1; /* fixed point , period =1 */
          ZPrevieousX=ZNextX;
          ZPrevieousY=ZNextY;
          /* */
          orbit[Iteration][0]=ZNextX;
          orbit[Iteration][1]=ZNextY;   
  
      }; 
   /* here iteration=IterationMax+1 but last element of orbit has number  IterationMax */    
   for(I=Iteration_Max-1;I&gt;0;I--) 
    if (SameComplexValue(orbit[Iteration_Max][0],orbit[Iteration_Max] [1],orbit[I][0],orbit[I][1],precision))
      return(Iteration_Max-I);
   return 0;
  }
  </code></pre>