0

要检查示例列表实施,我尝试了以下代码。但是每当我试图显示结果时,它就会进入一个循环。我找不到哪里出错了。

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

typedef struct linkedlist
{
    int data;
    struct linkedlist *next;
}node;

int main()
{
    int ch,num;

    node *head=NULL;
    head=(node *)malloc(sizeof(node));
    node *new=NULL;
    new=(node *)malloc(sizeof(node));
    node *temp=NULL;
    temp=(node *)malloc(sizeof(node));
    printf("\n1.Insert to list");
    printf("\n3.Display the list");
    printf("\n Enter Choice->");
    scanf("%d",&ch);
    switch(ch)
    {
     case 1:printf("\n Enter data->");
            scanf("%d",&num);
            new->data=num;
            new->next=NULL;
            head->next=new;
            break;

     case 3: temp=head;
            while(temp!=NULL)
            {
                printf("\n %d",temp->data);
                temp=temp->next;
            }


                break;
     default:printf("Wrong Choice");
              break;

    }
    return 0;
 }
4

3 回答 3

1

这里有两个错误。

  1. 您只分配“新”一次。这意味着每次用户输入“1”并实际将其链接到自身时,您都在重用同一个节点。
  2. 您根本不应该为“temp”分配节点,因为您没有使用它。您实际上正在使用这一行丢失指向该已分配节点的指针:case 3: temp=head;这称为“内存泄漏”。

我建议你多研究指针;他们似乎让你感到困惑。

于 2012-10-17T18:43:36.900 回答
1

为什么我觉得这是一道作业题?

这里有一些提示:

  1. head已分配,但从未初始化,这是您开始打印的地方。坦率地说,我很惊讶它没有崩溃。

  2. 您的菜单允许您打印列表或输入一个数字,然后程序结束。我怀疑您正在输入一个数字,然后再次运行该程序以打印出该列表。程序状态不会在运行之间保留。

于 2012-10-17T18:55:06.577 回答
0

我可以看到以下问题:

1)您没有使用选项循环,因此用户在每次运行程序时只能做一件事(插入或显示)。如果他选择插入,他将无法显示,如果他选择显示,则没有任何列表可显示。

2)每次要在列表中插入新节点时,都需要创建一个新节点。目前,您只是在更改同一节点的数据(由 new 指向)。

于 2012-10-17T18:46:54.267 回答