C - 为什么函数调用会导致分段错误



请有人告诉我为什么这个函数调用会导致分段错误

看看第二段代码,第一节没有错误我已经调试过了

向下滚动到第二个代码片段

#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 pathn");
   return;
  }
   printf("%ld:",ftell(fp));
  while((ch=fgetc(fp))!=EOF)
  {
     length=0;
     while(ch!='n')
     {
     printf("%c",ch);
     ch=fgetc(fp);
     length++;
     }
    printf("len:%dn",length);
    if(maxlen<length)
    maxlen=length;
    line++;
  }
printf("maxlen:%dn",maxlen);
printf("No.of lines:%dn",line);
fseek(fp,0,0);
str=(char **)malloc(line*sizeof(char *));
printf("__%ld____n",str);
for(length=0;length<line;length++)
{
 printf("%dt",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 wiset 'e':to exit:t");
   ch=getchar();
   getchar();
//

///本节导致段错误,以下代码是上一个代码的延续

看 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(被调用的函数在此文件中)不介意本节是否有逻辑错误

   #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("%st",p[3]);
     }
/////

//我的头文件(line.h) 包含这些声明

#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);

在函数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++;
}

最后一行与任何下一行都不匹配...

在 eclipse 或 Visual Studio 中创建一个新的 C 项目,并在其上运行调试器。查看执行的最后一行是什么。使用调试器查看变量以查看无效内容以及可能导致无效变量的原因。

此外,您尚未在应该打开的文件中发布任何示例输入。

相关内容

  • 没有找到相关文章

最新更新