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

Segmentation fault core dump, Pointers and Structs

 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 应该出现段错误。但我以前做过,但没有造成问题。我应该怎么做才能改变它?

正如 Mohid 指出的那样,您正在 mallocing 一个 struct group 然后通过立即更换指针来泄漏它。

getgrgid() returns 指向 已经存在的 条目的指针, 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);
      }
}