C语言 使用用户输入创建链表在 CodeBlock 上返回错误0xC0000005



当我调试并逐步进行时,一切正常,但是当我运行它时,我的程序在第二次迭代中进行第二次输入后崩溃。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct node {
  int x;
  struct node *next, *prev;
};
typedef struct node *node;

int main(void)
{
    int n, i;
    node head, number, temp;
    head = malloc(sizeof(node));
    head->prev = NULL;
    number = head;
    printf("Enter size of list: ");
    scanf("%d", &n);
    printf("Enter elements of list: ");
    for (i=0; i<n; i++)
    {
        scanf("%d", &number->x);
        number->next = malloc(sizeof(node));
        temp = number;
        number = number->next;
        number->prev = temp;
    }
    number->next=NULL;
    number = head;
    printf("/nThe list is: ");
    while(number->next != NULL)
    {
        printf ("%d ", number->x);
        number=number->next;
    }
    return 0;
}

我的代码出了什么问题?提前感谢!

编辑:添加了整个代码。

head = malloc(sizeof(node));

不。这是错误的。 nodestruct node *的别名;您没有分配足够的内存。您需要为struct node分配空间,而不是为指向struct node的指针分配空间。

请改为执行以下操作:

head = malloc(sizeof(struct node));

甚至更好:

head = malloc(sizeof(*head));

此行相同:

number->next = malloc(sizeof(node));

将其替换为:

number->next = malloc(sizeof(struct node));

或:

number->next = malloc(sizeof(*number->next));

最新更新