为什么在打印链表后我的执行被停止了?

Why is my execution being stopped after printing a linked list?

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node* link;
};
typedef struct node NODE;
typedef struct node HEAD;

void main()
{
    NODE *head;

    NODE *node1;
    node1 = malloc(sizeof(NODE));
    node1->data = 6;
    node1->link = head;
    head = node1;

    NODE *node2;
    node2 = malloc(sizeof(NODE));
    node2->data = 7;
    node2->link = head;
    head = node2;
    NODE *ptr = head;
    while(ptr != NULL)
    {
        printf("%d->",ptr->data);  //printing of current node's data.
        ptr = ptr->link;           //<------here execution is being halted after printing 5 and 6

        if(ptr == NULL)
        {
            printf("NULL");
        }
        
    }
}

输出为

7->6->

但我需要预期的输出为

7->6->NULL

能否请您查看代码并在必要时更正我的代码,还请解释为什么我的执行在打印数据后停止而不是执行 printf("NULL") 语句

这里:

node1->link = head;

此时,指针head未初始化,即既不是内存块也不是NULL。所以 linked-list 实际上看起来像 7 -> 6 -> ???。由于它不是NULL,它不满足ptr == NULL比较虽然满足ptr != NULL,保持运行循环但无法访问成员数据(因为没有'访问的东西),所以它停止了。

尝试初始化 struct node *head = NULL