Reputation: 239
Please some one tell me why is this function call resulting in a segmentation fault
Look at the second section of code the first section is free from errors i already debugged it
Scroll down to second code snippet
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#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<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<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();
///////This section causing segfault and the following code is continuation to previus code
Look at alpha(str,maxlen,line);
switch(ch)
{
case 'a': alpha(str,maxlen,line);///////////Causes Segmentation Fault?Why?
break;
//case 'c':chara(str);
// break;
case 'e':exit(0);
default :;
}
}
}
////alpha.c(The called function Is in this file)dont mind if this section has a logical error
#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<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]);
}
///////My header file(line.h) contains these declarations
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void alpha(char **p,int maxlen,int line);
void chara(char **p,int maxlen,int line);
Upvotes: 0
Views: 4326
Reputation: 1601
In Function alpha()
:
while(i < (line - 1))
{
if(strcmp(p[i],p[i+1])==+1)
{
strcpy(buffer,p[i+1]);
strcpy(p[i+1],p[i]);
strcpy(p[i],buffer);
}
i++;
}
Last Line is not matched with any Next Line...
Upvotes: 1
Reputation: 2487
Create a new C project in eclipse or Visual Studio and run the debugger on it. See what is the last line executed. With the debugger take a look at variables to see what is invalid and what could be causing it.
Also, you haven't posted any example input in the file that's supposed to be opened.
Upvotes: 0