Ben*_*eck 1 c struct list initializer
我正在尝试使用C(NOT C++)创建链接列表.链接列表通过函数llinit()初始化,该函数应该返回一个列表结构.但是,当我编译代码时,我在lltester.c文件中收到一条错误,指出"错误:无效的初始化程序".为什么是这样?
这是用于初始化llist.c文件中链表的函数:
list llinit()
{
list* ll = malloc(sizeof(list));
ll->head = NULL;
ll->tail = NULL;
return *ll;
}
Run Code Online (Sandbox Code Playgroud)
这是我的llist.h文件中的list结构:
typedef struct {
node *head;
node *tail;
} list;
Run Code Online (Sandbox Code Playgroud)
这是我在lltester.c文件中的主要功能,我尝试初始化列表:
int main()
{
list myList= llinit(); //This is the line where the error occurs on!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您的代码正在泄漏内存,因为它正在分配列表,malloc()然后按值返回该结构的内容.
如果你想拥有一个按值返回空列表的函数,你应该这样做:
list llinit()
{
list ll;
ll.head = NULL;
ll.tail = NULL;
return ll;
}
Run Code Online (Sandbox Code Playgroud)
以上情况很好,由于超出范围,因此没有价值"消失"的风险,这与返回本地int值的函数一样安全.根据需要将返回值(全部!)复制到调用者的内存中.
然后调用者决定节点是否应该在堆上是微不足道的.
更新:这是ideone上的代码,它确实编译并且不会为赋值生成错误main().