title: why is function call causing segmentation fault?
body: <p>Please some one tell me why is this function call resulting in a segmentation fault</p>
  
  <p><b>Look at the second section of code the first section is free from errors i already debugged it</b></p>
  
  <p><b>Scroll down to second code snippet</b></p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;stdlib.h&gt;
  #include&lt;string.h&gt;
  #include"line.h"
  main(int argc,char **argv,...)
  {
    FILE *fp;
    char ch,**str=0;
    int length=0,maxlen=0,line=0;
  
    if(argc==2)
    fp=fopen(argv[1],"r");
  
    else
    {
     printf("Expexted Input Was:\"./linesort\" \"filename\"\n");
     return;
    }
  
    if(fp==NULL)
    {
     printf("Source file not found ,Please Check If It Really Exists in Expected path\n");
     return;
    }
  
     printf("%ld:",ftell(fp));
  
    while((ch=fgetc(fp))!=EOF)
    {
       length=0;
       while(ch!='\n')
       {
       printf("%c",ch);
       ch=fgetc(fp);
       length++;
       }
  
      printf("len:%d\n",length);
      if(maxlen&lt;length)
      maxlen=length;
      line++;
    }
  
  printf("maxlen:%d\n",maxlen);
  printf("No.of lines:%d\n",line);
  fseek(fp,0,0);
  str=(char **)malloc(line*sizeof(char *));
  printf("__%ld____\n",str);
  
  for(length=0;length&lt;line;length++)
  {
   printf("%d\t",length);
   str[length]=malloc((maxlen+1)*sizeof(char));
   printf("__%ld____\n",str[length]);
   fgets(str[length],maxlen+1,fp);
   puts(str[length]);
  }
  
  fclose(fp);
  
  while(1)
  {
     printf(" \n'a':for alphabet wise \t'c':for character wise\t 'e':to exit:\t");
     ch=getchar();
     getchar();
  </code></pre>
  
  <p><b>///////This section causing segfault and the following code is continuation to previus code</b></p>
  
  <p><b>Look at alpha(str,maxlen,line);</b></p>
  
  <pre><code>   switch(ch)
     {
        case 'a':  alpha(str,maxlen,line);///////////Causes Segmentation Fault?Why?
                   break;
      //case 'c':chara(str);
      //    break;
      case 'e':exit(0);
      default :;
     }
     }
   }
  </code></pre>
  
  <p>////<b>alpha.c(The called function Is in this file)dont mind if this section has a logical error</b></p>
  
  <pre><code>   #include"line.h"
     void alpha(char **p,int maxlen,int line)
      {
       int i=0;
       char *buffer;
       printf("in alpha");
       buffer = (char *)malloc((maxlen+1)*sizeof(char));
       while(i&lt;line)
       {
        if(strcmp(p[i],p[i+1])==+1)
        {
          strcpy(buffer,p[i+1]);
           strcpy(p[i+1],p[i]);
           strcpy(p[i],buffer);
          }
        i++;
       }
        printf("%s\t",p[3]);
       }
  </code></pre>
  
  <p>///////<b>My header file(line.h) contains these declarations </b></p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;stdlib.h&gt;
  #include&lt;string.h&gt;
  void alpha(char **p,int maxlen,int line);
  void chara(char **p,int maxlen,int line);
  </code></pre>