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

标签 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 应该发生段错误。但我以前这样做过,并没有造成问题。我应该怎么做才能改变它?

最佳答案

正如 Mohid 指出的那样,您正在malloc一个结构组,然后通过立即替换指针来泄漏它。

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

关于c - 分段故障核心转储、指针和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291655/

相关文章:

c - 是否有任何工具可以解析 C 文件并在 TreeView 中显示我的代码布局,以便我可以轻松判断函数依赖于哪个 #define 进行编译?

c - 是否可以有一个父进程 GTK 应用程序 "contain"子进程 GTK windows?

c++ - 区间树中链表元素的插入

C 编程堆栈

由损坏的堆栈触发时捕获 SIGSEGV

c - 为什么我的 C 队列中出现段错误(核心已转储)?

c - 如何确定一组三角形中角最小的三角形

c - 是否有设置超时的 wait() 系统调用版本?

c - 图表示是C算法

c - 为什么我有时只会遇到段错误?