#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;
    }
}

正如标题所暗示的,我正试图巧妙地遍历一个链表
预期产出是


.
.

观测结果为:9
密码怎么了?

最佳答案

只是因为代码中有一个语句。
当您试图分配新链接时,忘记指向下一个链接。
正因为如此,您只在一个指针上进行分配,从而导致内存泄漏。

#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;
    }
}

关于c - 遍历链表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14757732/

10-15 07:45