2

尝试将对象插入到table包含结构类型数组的 (struct)时,我收到此消息ObjectLink。结构:

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

我在以前的问题中搜索过,但这没有帮助。这里有什么问题?

4

2 回答 2

4

既然linkedObjects是指针,linkedObjects[i]就是对象本身。运算符仅适用于->指针;当您有 时struct,您需要使用常规点运算符.进行字段访问:

table->linkedObjects[i].key = object;
//                     ^--- Here
于 2012-12-24T14:25:21.507 回答
3

数组下标运算符[]定义为:E1[E2] == *((E1)+(E2)). 使用->,您试图取消引用一个不存在的指针(因为您已经使用 operator 取消引用了您的指针[])。所以正确的解决方案是:

table->linkedObjects[i].next->key = object;

代替:

table->linkedObjects[i]->next->key = object;

linkedObjects[i]是 type ObjectLink,不需要取消引用它。

于 2012-12-24T14:25:32.143 回答