それをデバッグすると、Lがnullptrであることがわかります。なぜリストが正しく返されないのか分かりません。リンクされたリスト関数の戻り値でポインタが発生しました。私は理解できません
これらは、構造体(私はリストとノードを使用する必要があります)、次のとおりです。
typedef struct node node;
typedef struct List list;
struct node {
int data;
node *next;
};
struct List {
node *head;
};
リストを作成する関数:BuildListため
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;
}
補助機能:
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;"に失敗します。それがnullptrだと主張するPrintListで。それは、最終的に、BuildList内の動的な割り当てであることは明らかです。メインからの呼び出しは、
list *head = NULL;
BuildList(&head);
PrintList(head);
です。 PrintList(&頭);それは失敗することなく、空のリストを印刷します。
あなたはどこに頭を割り当てていますか? – stark
先頭に?ビルドリストまたはメイン? BuildListの頭部はL. –