在C中动态创建链接列表

时间:2016-08-22 18:53:03

标签: c struct linked-list

我尝试使用结构在c中动态创建链接列表并打印它。但我的下面的代码是抛出运行时错误可以任何人告诉我为什么我收到此错误。这是我的代码。

#include <stdio.h>
struct cnode
{
    int value;
    struct cnode *next;
};

void print_list(struct cnode* start)
{
    while(start->next != NULL)
    {
        printf("%d->", start->value);
        start = start->next;
    }
}

int main(void)
{
    int i,n,val;
    //List length
    scanf("%d", &n);

    //Head
    struct cnode* start;
    scanf("%d", &val);
    start->value = val;

    struct cnode* temp = start;

    for (i=1; i<=n-1; i++)
    {
        struct cnode* node;
        scanf("%d", &val);
        node->value = val;

        temp->next = node;
        temp = node;
    }
    temp->next = NULL;

    print_list(start);

    return 0;
}

2 个答案:

答案 0 :(得分:6)

您无法为指向指针分配内存。您需要致电malloc来执行此操作。

struct cnode *start = malloc(sizeof(struct cnode));
if (start == NULL) {
    perror("malloc failed");
    exit(1);
}

...

struct cnode *node= malloc(sizeof(struct cnode));
if (node == NULL) {
    perror("malloc failed");
    exit(1);
}

此外,打印列表时,您不打印最后一个值。

while(start != NULL)
{
    printf("%d->", start->value);
    start = start->next;
}

完成后不要忘记释放记忆。

print_list(start);

while (start != NULL) {
    temp = start;
    start = start->next;
    free(temp);
}

return 0;

答案 1 :(得分:4)

这是一个问题:

当您编写“struct cnode * node;”时您要求编译器创建指向结构的指针。但是没有为该结构分配内存。当你编写“node-&gt; value = val”时,你要求机器将val的值存储到未分配的内存中,无论垃圾发生在“node”中。您需要使用malloc实际分配内存,然后将指针存储在“node”变量中。