运行 在 C 语言的双向链表中插入开始(头)函数时出现时间错误?
Run Time Error in insert at beginning (head) function in a Doubly Linked List in C?
请指出我代码逻辑上的错误(如果有的话)。它是一个试图在C语言的双向链表的开头插入一个元素的函数。
struct DLL *insertAthead(struct DLL *head, int newData)
{
struct DLL *p = (struct DLL *)malloc(sizeof(struct DLL *));
p->prev = NULL;
p->next = head;
head->prev = p;
p->data = newData;
head = p;
return head;
}
struct DLL *p = (struct DLL *)malloc(sizeof(struct DLL *));
应该是:
struct DLL *p = malloc(sizeof(struct DLL));
^^^^^^^^^^^^^^^^^^
目前您只分配指针的大小 (struct DLL *
),而不是 struct DLL
.
所需的任何大小
请注意,有些人喜欢这样写上面的内容:
struct DLL *p = malloc(sizeof(*p));
这可以说更稳健。
请注意,我还删除了多余的强制转换,这本身并不是一个错误,但只是不必要的混乱 and can in some cases be dangerous。
请指出我代码逻辑上的错误(如果有的话)。它是一个试图在C语言的双向链表的开头插入一个元素的函数。
struct DLL *insertAthead(struct DLL *head, int newData)
{
struct DLL *p = (struct DLL *)malloc(sizeof(struct DLL *));
p->prev = NULL;
p->next = head;
head->prev = p;
p->data = newData;
head = p;
return head;
}
struct DLL *p = (struct DLL *)malloc(sizeof(struct DLL *));
应该是:
struct DLL *p = malloc(sizeof(struct DLL));
^^^^^^^^^^^^^^^^^^
目前您只分配指针的大小 (struct DLL *
),而不是 struct DLL
.
请注意,有些人喜欢这样写上面的内容:
struct DLL *p = malloc(sizeof(*p));
这可以说更稳健。
请注意,我还删除了多余的强制转换,这本身并不是一个错误,但只是不必要的混乱 and can in some cases be dangerous。