1
deleteList()
機能を使用してリストを削除しても、 のリンクリストを練習していましたが、私のコードではprintList()
の機能が残ります。削除関数宣言や関数呼び出しで問題がありますか?main()
とprintList()
関数に何かエラーがありますか?リンクされたリストを削除した後もまだ印刷中です
私はインターネットを検索し、チュートリアルサイトからもコードを試しました。
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} node;
void deleteList(node **head);
void printList(node *head);
int main(void) {
node *prev, *head, *p;
head = NULL;
for (int i = 0; i < 5; i++) {
p = malloc(sizeof(node));
printf("Enter number\n");
scanf("%i", &p->data);
p->next = NULL;
if (head == NULL)
head = p;
else
prev->next = p;
prev = p;
}
deleteList(&head);
printList(head);
free(p);
return 0;
}
void printList(node *head) {
if (head == NULL) {
printf("\nNULL\n");
} else {
printf("\n%i", head->data);
printList(head->next);
}
}
void deleteList(node **head) {
node *cur = *head;
node *nxt;
while (cur != NULL) {
nxt = cur->next;
free(cur);
cur = nxt;
}
*head = NULL;
}
:ここ
は改良版ですか?それは私のためにnullを表示しています –
deleteListeを追加した後にコードを再度コンパイルしましたか? –
'free(p);'は空き(最後に割り当てられた 'p'値がリストの一部として格納されているように)倍に見え、UBを引き起こします。 'p'をローカルにしてループさせるべきです。 – VTT