0
#include<stdio.h>
struct node
{
    int item;
    struct node *link
};

main()
{
    struct node *start,*list;
    int i;
    start = (struct node *)malloc(sizeof(struct node));
    list = start;
    start->link = NULL;
    for(i=0;i<10;i++)
    {
        list->item = i;
    list->link = (struct node *)malloc(sizeof(struct node));
    }
    list->link = NULL;
    while(start != NULL)
    {
        printf("%d\n",start->item);
    start = start->link;
    }
}

タイトルが示唆しているように、リンクされたリストを反復的にトラバースしようとしていますが、予想される出力は 0 1 です。. 9 観測された出力は次のとおりです。 9 コードの何が問題なのですか?

4

2 に答える 2

6

作成後に次のノードを指しているわけではないlistため、毎回前のノードを上書きしているだけです。これを試して:

for(i=0;i<10;i++)
{
    list->item = i;
    list->link = (struct node *)malloc(sizeof(struct node));
    list = list->link;
}
于 2013-02-07T18:00:06.490 に答える
4

これは、コード内の 1 つのステートメントが原因です。新しいリンクを割り当てようとしたときに、次のリンクを指すのを忘れました。そのため、1 つのポインターにのみ割り当てていたため、メモリ リークが発生していました。

#include<stdio.h>
struct node
{
    int item;
    struct node *link
};

main()
{
    struct node *start,*list;
    int i;
    start = (struct node *)malloc(sizeof(struct node));
    list = start;
    start->link = NULL;
    for(i=0;i<10;i++)
    {   
        list->item = i;
        list->link = (struct node *)malloc(sizeof(struct node));
        list = list->link;
    }   
    list->link = NULL;
    while(start != NULL)
    {   
        printf("%d\n",start->item);
        start = start->link;
    }   
}
于 2013-02-07T17:59:51.933 に答える