当我调试并逐步进行时,一切正常,但是当我运行它时,我的程序在第二次迭代中进行第二次输入后崩溃。这是我的代码:
#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));
不。这是错误的。 node
是struct 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));