这是我的代码,我正在尝试让程序向用户询问一些数字,然后打印出来。为了我的目的,我已经实现了链接列表的使用。该程序有效,但突然结束,我不知道在代码中添加或删除的内容。
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int item;
struct node *next;
}ListNode;
void printList(ListNode *head);
int main()
{
int n;
ListNode *head = NULL;
ListNode *temp = NULL;
printf("Enter a value: ");
scanf("%d", &n);
while (n != -1)
{
if (head == NULL)
{
head = malloc(sizeof(ListNode));
temp = head;
}
else
{
temp->next = malloc(sizeof(ListNode));
temp = temp->next;
}
temp->item = n;
printf("Enter a value: ");
scanf("%d", &n);
}
while (head != NULL)
{
printf("%i\n", head->item);
head = head->next;
}
free(head);
return 0;
}
当我输入3个麻木(例如1,2和3)时,它打印出123然后无休止地结束程序。有人可以对此有所了解吗?
答案 0 :(得分:2)
您不会将最后一个元素的下一个字段设置为NULL:
temp->item = n;
temp->next = NULL; // add this line
打印时,while (head != NULL)
将永远不会保留,因为头部有垃圾 - >接下来。那么你试图访问导致崩溃的任意指针。
答案 1 :(得分:-1)
结束是因为在完成打印后,您return 0;
传统上会在main()
此外,您有内存泄漏。除了NULL之外没有任何东西被释放,根据手册页,它不会导致执行任何操作。
我再看一遍。你的另一个问题是你永远不会初始化head-&gt; next,所以它只是你从缓冲区溢出得到的一些随机垃圾。