打印单链表突然结束程序

时间:2014-03-18 02:13:01

标签: c pointers linked-list singly-linked-list

这是我的代码,我正在尝试让程序向用户询问一些数字,然后打印出来。为了我的目的,我已经实现了链接列表的使用。该程序有效,但突然结束,我不知道在代码中添加或删除的内容。

#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然后无休止地结束程序。有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

您不会将最后一个元素的下一个字段设置为NULL:

temp->item = n;
temp->next = NULL;  // add this line

打印时,while (head != NULL)将永远不会保留,因为头部有垃圾 - >接下来。那么你试图访问导致崩溃的任意指针。

答案 1 :(得分:-1)

结束是因为在完成打印后,您return 0;传统上会在main()

中遇到该程序时结束该程序

此外,您有内存泄漏。除了NULL之外没有任何东西被释放,根据手册页,它不会导致执行任何操作。

我再看一遍。你的另一个问题是你永远不会初始化head-&gt; next,所以它只是你从缓冲区溢出得到的一些随机垃圾。