C 链表中的取消引用错误-非typedef错误

C 链表中的取消引用错误-非typedef错误,c,pointers,memory,C,Pointers,Memory,我找不到我的解引用错误来拯救我的生命。就我所能看到的,我已经把我所有的声明都放在了需要的地方,却看不到我在哪里定义了一个糟糕的结构 编辑:粘贴缺少大量代码,但它包含使用指针的所有代码。其他一切都在检查,以确保文件是正确的文件、正确的位置、错误处理等 typedef struct list{ int pid; char *name; struct list* link; }LIST; void begin(FILE *file, char *argv[]) { struct LIST *ro

我找不到我的解引用错误来拯救我的生命。就我所能看到的,我已经把我所有的声明都放在了需要的地方,却看不到我在哪里定义了一个糟糕的结构

编辑:粘贴缺少大量代码,但它包含使用指针的所有代码。其他一切都在检查,以确保文件是正确的文件、正确的位置、错误处理等

typedef struct list{
int pid;
char *name;
struct list* link;
}LIST;

void begin(FILE *file, char *argv[])
{
  struct LIST *root, *p, *tail;
  struct utmp x[BUFF];
  root = NULL;
  char *name;
  int c;
  int i;
  struct utmp hold;
  int pid;
  tail = malloc(sizeof(LIST));
  int logins = 0;
  int logouts = 0;
  for (i=0;i<=BUFF;i++)
    {
      c = fread(x, sizeof(struct utmp), BUFF, file);
      if (strcmp(x[i].ut_user, argv[1]) == 0)
        {
          if (x[i].ut_type == 7)
            {
              hold = x[i];
              logins++;
              pid = x[i].ut_pid;
              name = hold.ut_user;
              p = create(pid, name); //<--Line 129 
              if (root == NULL)
                {
                root = tail = p;
                }
              else
                {
                  tail->link = p; //<---Line 136
                  tail = p;
                }
              printf("%d\n", p->pid); //<---Line 139
            }
        }
      if (x[i].ut_pid == pid && x[i].ut_type == 8)
        {
          pid = 0;
          logouts++;
        }
    }


LIST *create(int pid, char *name)
{
  LIST *p;
  p = malloc(sizeof(LIST));
  p->pid = pid;
  p->link = NULL;
  p->name = name;
  return p;
}

您的问题在于如何使用structs和typedef。你的定义

typedef struct list{
...
}LIST;

创建两种数据类型:结构struct list及其typedef等效列表。然后在声明变量时,使用未定义的struct LIST。这将生成所有3个错误。编译器假定您正在其他地方定义此结构。人们使用typedef的原因是为了避免以后使用struct。

请在此处显示相关代码,而不是提供参考。同时显示确切的错误消息,以及它位于哪一行。对于i=0;我typedef struct list{ ... }LIST;