为什么在打印链表后我的执行被停止了?
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
。
#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
。