【发布时间】:2011-08-22 11:03:23
【问题描述】:
好的,我已经在谷歌上看到这个问题一百万次了,但对我来说仍然没有成功。
我正在尝试创建一个链接列表。这是List.c中定义的结构:
typedef struct List
{
unsigned int size;
ObjectP head;
} List;
现在您会注意到 struct 和 typedef 都被命名为 LIST,据我所知,这很好。但重要的是该结构不是匿名的。
现在在List.h(当然也包括在List.c)我定义了另一个typedef:
typedef struct List* ListP;
据我了解,它将 ListP 定义为指向名为 List 的结构的指针,就像我真正命名它一样。
这是我得到错误的地方:
void freeList(ListP list)
{
ObjectP obj1;
ObjectP obj2;
if (list != NULL)
{
obj1 = list->head;
while (obj1->next != NULL) <---- HERE
{
obj2 = obj1;
obj1 = obj1->next; <---- HERE
freeObject(obj2);
}
free(list);
}
}
我不明白为什么obj1 = list->head; 没问题,但在其他任何地方我尝试访问结构成员时都会遇到此错误。
正如我所说,我已经尝试寻找它,但是其他人有我在我的代码中找不到的错误。谢谢!
编辑:List.c 还包括 Object.h 所以这不是问题。对象定义如下:
在Object.h 我有typedef struct Object* ObjectP;
在Object.c 我有
typedef struct Object
{
void* key;
ObjectP next;
} Object;
还是不知道是什么问题!
【问题讨论】:
-
next定义在哪里? -
注意在代码中包含
ObjectP是什么? -
如何定义ObjectP?在使用它定义 List 结构之前,它是否正确定义?
-
ObjectP是什么?我假设您将它用作列表中的节点,但您没有提供任何定义。您收到错误是因为您使用ObjectP的方式,而不是因为与您的ListP类型相关的任何内容。 -
您的问题以“在 Object.c 中我有 [
Object] 的定义”的部分开始和结束。如果它在您的Object.c文件中,那么您在List.c中的代码不知道构成Object的任何字段。因此,当您尝试访问一个错误。您需要在Object.h内定义您的Object结构(或从List.c中删除对该结构内事物的引用)。