尝试将对象插入到包含结构类型table
数组的ObjectLink
(struct)时,我收到此消息。结构:
typedef struct ObjectLink {
void *key;
struct Object *next;
} ObjectLink;
typedef struct Object {
void *key;
ObjectLink *top;
} Object;
typedef struct Table{
ObjectLink *linkedObjects;
int size, originalSize;
HashFcn hfun;
PrintFcn pfun;
ComparisonFcn fcomp;
} Table;
失败的代码(在所有赋值& if语句中):
Boolean InsertObject(TableP table, ObjectP object)
{
int i = table->hfun(object, table->size);
if (table->linkedObjects[i]->key == NULL)
{
table->linkedObjects[i]->key = object;
} else
{
table->linkedObjects[i]->next->key = object;
}
return TRUE;
}
我在previous questions搜索过,但没有帮助。这有什么不对?
答案 0 :(得分:4)
由于linkedObjects
是指针,linkedObjects[i]
是对象本身。 ->
运算符仅适用于指针;如果您有struct
,则需要使用常规点运算符.
进行字段访问:
table->linkedObjects[i].key = object;
// ^--- Here
答案 1 :(得分:3)
数组下标运算符[]
定义为:E1[E2] == *((E1)+(E2))
。使用->
,您尝试取消引用不存在的指针(因为您已经使用运算符[]
取消引用了指针)。所以正确的解决方案是:
table->linkedObjects[i].next->key = object;
而不是:
table->linkedObjects[i]->next->key = object;
linkedObjects[i]
的类型为ObjectLink
,无需取消引用它。