我找不到我的解除引用错误来挽救我的生命。据我所知,我已经得到了他们需要的所有声明,无法看到我在哪里定义了一个糟糕的结构。
编辑:粘贴丢失了大量代码,但它包含了使用指针的所有代码。其他一切都是检查以确保文件是正确的文件,正确的位置,错误处理等。
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;
}
错误:
main.c: In function ‘begin’:
main.c:129:10: warning: assignment from incompatible pointer type [enabled by default]
main.c:136:9: error: dereferencing pointer to incomplete type
main.c:139:24: error: dereferencing pointer to incomplete type
答案 0 :(得分:1)
您的问题是混淆如何使用结构和typedef。你的定义
typedef struct list{
...
}LIST;
创建2个数据类型结构struct list
及其typedef等效LIST
。然后,当您声明变量时,使用未定义的struct LIST
。这会产生所有3个错误。编译器假设您正在其他地方定义此结构。人们使用typedef
的原因是为了稍后使用struct
。