我只是在摆弄链表,但似乎我的脑海中有很多地方是错误的。我已经用函数试过了,但是我不能让它工作。我认为我可以让它变得更简单,但它仍然不起作用。它通常只打印正确的第一个元素,然后打印随机的大数字(很可能是内存地址)
我只想创建一个列表并打印它的内容。
#include <stdio.h>
#include <stdlib.h>
struct el{
int value;
struct el *next;
};
typedef struct el Elem;
int main()
{
int nr, i;
struct el *Head, *Conductor;
Head = malloc(sizeof(Elem));
Conductor = Head;
printf("How many elements do you want to add? ");
scanf("%d", &nr);
for(i = 0; i < nr; i++)
{
printf("Enter value for element %d: ", i);
scanf("%d", &(Conductor->value));
Conductor = Conductor->next;
Conductor = malloc(sizeof(Elem));
}
free(Conductor->next);
Conductor->next = NULL;
Conductor = Head;
printf("\n");
for(i = 0; i < nr; i++)
{
printf("%d -> ", Conductor->value);
Conductor = Conductor->next;
}
return 0;
}发布于 2013-05-31 20:05:26
您应该先为Conductor->next分配内存,然后再将Conductor->next分配给Conductor。
for(i = 0; i < nr; i++)
{
printf("Enter value for element %d: ", i);
scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;
}在赋值之前进行分配是很重要的,否则“旧的”Conductor->next将不会指向新的Conductor。
发布于 2013-05-31 20:02:11
您不会为next指针分配内存。
分配前需要进行分配:
scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;发布于 2013-05-31 20:05:56
存储器应该被分配给Conductor->next,
按如下方式更改循环:
for(i = 0; i < nr; i++)
{
printf("Enter value for element %d: ", i);
scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;
}https://stackoverflow.com/questions/16856776
复制相似问题