【发布时间】:2016-12-10 13:05:58
【问题描述】:
调试时,它告诉我 L 是 nullptr。我不知道为什么它不能正确返回列表。
这些是结构体(我必须使用列表和节点):
typedef struct node node;
typedef struct List list;
struct node {
int data;
node *next;
};
struct List {
node *head;
};
创建列表的函数:
void BuildList(list *L) {
node *head = NULL, *temp = head;
int num;
printf("Input list's elements: \n");
do {
scanf("%d", &num);
if (num != -1) {
if (head == NULL) {
head = BuildNode(num);
temp = head;
}
else {
temp->next = BuildNode(num);
temp = temp->next;
}
}
} while (num != -1);
L = (list *) malloc(sizeof(list));
L->head = head;
}
BuildList 的辅助功能:
node* BuildNode(int num1) {
node *node1 = (node *)malloc(sizeof(node));
node1->data = num1;
node1->next = NULL;
return node1;
}
打印功能:
void PrintList(list *L) {
node *head;
head = L->head;
printf("The list's elements are: ");
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
程序在“head = L->head;”上失败在 PrintList,声称它是一个 nullptr。它的起源可以证明是最后在BuildList中的动态分配。来自 main 的调用是:
list *head = NULL;
BuildList(&head);
PrintList(head);
当替换 PrintList(head);与打印列表(&头);它打印一个空列表,不会失败。
【问题讨论】:
-
你在哪里分配了头?
-
哪个头?在 BuildList 或 main 中?在 BuildList 中,head 被称为 L.
标签: c debugging pointers singly-linked-list