C错误中的链接列表 - Initalizer错误无效

时间:2013-04-25 08:25:35

标签: c list struct initializer

我正在尝试使用C(NOT C ++)创建链接列表。链接列表通过函数llinit()初始化,该函数应该返回一个列表结构。但是,当我编译代码时,我在lltester.c文件中收到一条错误,指出“错误:无效的初始化程序”。这是为什么?

这是用于初始化llist.c文件中链表的函数:

list llinit()
{
    list* ll = malloc(sizeof(list));
    ll->head = NULL;
    ll->tail = NULL;
    return *ll;
}

这是我的llist.h文件中的列表结构:

typedef struct {
    node *head;
    node *tail;
} list;

这是我在lltester.c文件中的主要功能,我尝试初始化列表:

int main()
{
    list myList= llinit(); //This is the line where the error occurs on!

    return 0;
}

2 个答案:

答案 0 :(得分:7)

您的代码正在泄漏内存,因为它正在使用malloc()分配列表,然后按值返回该结构的内容

如果你想拥有一个按值返回空列表的函数,你应该这样做:

list llinit()
{
    list ll;
    ll.head = NULL;
    ll.tail = NULL;

    return ll;
}

以上情况很好,由于超出范围,因此没有价值“消失”的风险,这与例如安全性一样安全。返回本地int值的函数。返回(全部!)会根据需要复制到调用者的内存中。

然后,调用者决定该节点是否应该在堆上,这是微不足道的。

更新Here is the code on ideone,它确实可以编译,并且不会为main()中的作业生成错误。

答案 1 :(得分:0)

你必须将结构声明为

typedef struct _list{
list* head;  /* could have been struct node* as well */
list* tail;

} list;

此外,列表是您的自定义结构。并且llPushBack()不是你结构的琥珀。