分段故障核心转储,指针和结构

时间:2015-02-03 04:59:24

标签: c segmentation-fault

 void group(char *chars, int v)
{
      int gid = atoi(chars);
      struct group *g = malloc(sizeof(struct group));
      g = getgrgid(gid);
      printf("file group: %s (gid: %d\n", g->gr_name, gid);
      return;
}

应该为g-> gr_name发生分段错误。但我以前做过这件事,并没有造成问题。我应该怎么做才能改变它?

1 个答案:

答案 0 :(得分:0)

正如Mohid指出的那样,你malloc struct group然后通过立即更换指针来泄漏它。

getgrgid()会返回指向已存在条目的指针, NULL如果未找到任何条目,或发生错误。您需要检查错误情况。至少,像:

void group(char *chars, int v)
{
      int gid = atoi(chars);
      struct group *g = getgrgid(gid);
      if (g)
      {
          printf("file group: %s (gid: %d)\n", g->gr_name, gid);
      }
      else if (errno)
      {
          printf("error checking gid (gid: %d)\n", gid);
      }
      else
      {
          printf("no entry for gid: %d\n", gid);
      }
}