我试图为一个链表实现一个推送函数,但是下面的程序导致了一个分段错误。我想知道几件事情:什么是结构的属性的默认值?看来我必须手动将head->next
的值设置为NULL
。那么head->next
的默认值是多少呢?C Struct的属性的默认值
我相信,程序停止的原因是因为在推功能,head->next != NULL
所以它然后执行行head = head->next
,这使我想知道的head->next
值是什么,如果它不是NULL
,为什么这会导致分段故障?
typedef struct Node {
struct Node *next;
int data;
} Node;
void push(Node *head, int data);
int main()
{
struct Node *head = malloc(sizeof(Node));
head->data = 1;
// Works when I uncomment this line
// head->next = NULL;
push(head, 2);
return 0;
}
/* Insert */
void push(Node *head, int data) {
while (head != NULL) {
if (head->next == NULL) {
Node *n = malloc(sizeof(Node));
n->data = data;
head->next = n;
break;
}
head = head->next;
}
}
两个downvotes并没有意见?为了帮助你 - 你很可能因为缺乏研究努力而陷入低估(可能是?),因为正如下面的答案所述,“在分配之前阅读它们是未定义的行为,”这是相对常见的知识,因为任何C教程,尤其是链接列表上的教程,可能会告诉你。 –