c - C 错误中的链表 -- Invalid Initalizer 错误

标签 c list struct initializer

我正在尝试使用 C(不是 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;
}

最佳答案

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

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

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

    return ll;
}

以上很好,不存在由于超出范围而导致值“消失”的风险,这与例如返回本地 int 值的函数。返回的(全部!)根据需要复制到调用者的内存中。

对于调用者来说,决定节点是否应该在堆上是微不足道的。

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

关于c - C 错误中的链表 -- Invalid Initalizer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209848/

相关文章:

java - 在java中连接两个列表,不带null

C 链表 - 将指针写入文件

c - Magic Square代码帮助,想知道将数字向下移动到哪里用C编程

R 比较两个列表是否完全相等

c - block 范围内的 extern 与文件范围内的 typedef 不冲突?

r - 如何递归遍历 R 列表中的所有键值对并修改值?

c++ - 在我编写的处理 csv 文件的相当基本的 C++ 程序中寻找错误

json - 将 JSON 文件解析为 struct golang

c - 无法从客户端连接到套接字

c - 为什么这个代码给出这个输出 - "HCF is: 1"每当 a%b != 0?