【问题标题】:segmentation violation when indirecting through unallocated pointers通过未分配指针间接时的分段违规
【发布时间】:2016-04-14 10:37:36
【问题描述】:

我尝试了一些东西,但 Resus 主要不知道如何逐行读取文件以比较它们之间的行,我得到错误分段错误(核心转储)。 这是我的 uniq -u 命令功能

void uniq_u()
{
//  strcpy(file_name1,params[2]);
FILE *file = fopen ( file_name1, "r" );
if ( file != NULL )
{

  fgets(prev, sizeof prev,file);
  while ( fgets ( line, sizeof line, file ) != NULL ) /* read a line */
  {
 if(!strcmp(line, prev))

        printf("%s", prev);
 else 
        strcpy(prev,line);
  }
  fclose ( file );
}
}

谢谢!

【问题讨论】:

  • 调试是找出分段违规发生位置的超级方法。您没有显示 prevline 是如何定义的(为什么不将它们设为本地?),但我的猜测是它们是没有分配内存的指针。换句话说,你可能有char *line;,你需要char line[200];

标签: c linux uniq


【解决方案1】:

请提及“prev”和“line”变量的声明。 无论如何,我认为阅读这篇文章可能会解决您的问题:Difference between char* and char[]

【讨论】:

  • char *line; char *prev;
  • @LaurentiuBobora 尝试从我提供的链接中阅读答案,char* 是只读的,除非动态分配,并且您还应该收到有关使用未初始化指针的警告。将它们更改为 char line[200] , prev[200];应该让它工作。
  • 我已经改变了,但甚至没有这样:(
  • @LaurentiuBobora 您是否也将 fgets 的第二个参数更改为 199 ?
  • @LaurentiuBobora 很高兴你能成功。如果它帮助您解决问题,请不要忘记将我的答案标记为已选答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2020-04-19
  • 2020-09-25
  • 2020-12-24
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多